kreta/Sda.DataProvider/Wrappers/MSSQL/MSSQLDataReaderWrapper.cs
2024-03-13 00:33:46 +01:00

191 lines
4.6 KiB
C#

using System;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using SDA.DataProvider.Core;
namespace SDA.DataProvider.MSSQLWrappers
{
class MSSQLDataReaderWrapper : SDADataReaderWrapper
{
internal SqlDataReader Reader;
internal MSSQLDataReaderWrapper(SqlDataReader reader)
{
Reader = reader;
}
protected override IDataReader WrappedDataReader
{
get
{
return Reader;
}
}
bool _disposed;
protected override void Dispose(bool disposing)
{
if (_disposed)
{
return;
}
if (disposing)
{
if (Reader != null)
{
Reader.Dispose();
Reader = null;
}
}
_disposed = true;
}
public override void Close()
{
Reader.Close();
}
public override bool Read()
{
try
{
return Reader.Read();
}
catch (SqlException ex)
{
throw MSSQLExceptionHelper.TranslateSqlException(ex);
}
}
public override bool NextResult()
{
return Reader.NextResult();
}
public override bool IsDBNull(int index)
{
return Reader.IsDBNull(index);
}
public override bool GetBoolean(int index)
{
object value = GetValue(index);
if (value is Boolean)
{
return (bool)value;
}
char temp = GetChar(index);
switch (temp)
{
case '0':
case 'f':
case 'F':
case 'n':
case 'N':
return false;
case '1':
case 't':
case 'T':
case 'y':
case 'Y':
return true;
default:
throw new SDADataProviderException(new InvalidCastException());
}
}
public override byte GetByte(int index)
{
return Reader.GetByte(index);
}
public override char GetChar(int index)
{
string temp = Reader.GetString(index);
if (temp.Length == 1)
{
return temp[0];
}
throw new InvalidCastException();
}
public override DateTime GetDateTime(int index)
{
return Reader.GetDateTime(index);
}
public override decimal GetDecimal(int index)
{
return Convert.ToDecimal(Reader.GetValue(index), CultureInfo.InvariantCulture);
}
public override double GetDouble(int index)
{
return Convert.ToDouble(Reader.GetValue(index), CultureInfo.InvariantCulture);
}
public override short GetInt16(int index)
{
return Convert.ToInt16(Reader.GetValue(index), CultureInfo.InvariantCulture);
}
public override int GetInt32(int index)
{
return Convert.ToInt32(Reader.GetValue(index), CultureInfo.InvariantCulture);
}
public override long GetInt64(int index)
{
return Convert.ToInt64(Reader.GetValue(index), CultureInfo.InvariantCulture);
}
public override string GetString(int index)
{
return Reader.GetString(index);
}
public override string GetLongString(int index)
{
return Reader.GetString(index);
}
public override object GetValue(int index)
{
return Reader.GetValue(index);
}
public override int GetValues(object[] values)
{
return Reader.GetValues(values);
}
public override DataTable GetSchemaTable()
{
return Reader.GetSchemaTable();
}
public override Guid GetGuid(int i)
{
return Reader.GetGuid(i);
}
public override object this[string name] => Reader[name];
public override object this[int index]
{
get
{
return Reader[index];
}
}
public override int FieldCount => Reader.FieldCount;
public override int GetOrdinal(string fieldname)
{
return Reader.GetOrdinal(fieldname);
}
}
}