laatzen/Common/Logic/Common.Logic.Extensions.SQL/SQLReader.cs
2024-07-01 08:42:23 +02:00

53 lines
1.5 KiB
C#

namespace Common.Logic.Extensions.SQL
{
using Common.Logic.Extensions.SQL.Interfaces;
using System;
using System.Data.SqlClient;
public class SQLReader : ISQLReader, IDisposable
{
private readonly SqlDataReader sqlDataReader;
private SQLReader(SqlDataReader sqlDataReader)
=> this.sqlDataReader = sqlDataReader.EnsureNotNull(nameof(sqlDataReader));
public void Dispose()
{
this.sqlDataReader.Close();
this.sqlDataReader.Dispose();
}
public T GetValue<T>(Int32 index)
{
var value = default(T);
if (0 <= index && index < this.sqlDataReader.FieldCount)
{
if (!this.sqlDataReader.IsDBNull(index))
{
var readedValue = this.sqlDataReader.GetValue(index);
var type = Nullable.GetUnderlyingType(typeof(T));
if (type is null)
{
type = typeof(T);
}
readedValue = Convert.ChangeType(readedValue, type);
if (readedValue is T expectedValue)
{
value = expectedValue;
}
}
}
return value;
}
internal Boolean Read() => this.sqlDataReader.Read();
public static implicit operator SQLReader(SqlDataReader sqlDataReader) => new SQLReader(sqlDataReader);
}
}