53 lines
1.5 KiB
C#
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);
|
|
}
|
|
} |