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); } } }