191 lines
4.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|