private static T GetValueFromReader <T>(bool isNull, IDataReader reader, IRecordWrapper wrapper, int index) { var typeCode = Type.GetTypeCode(typeof(T).GetNonNullableType()); switch (typeCode) { case TypeCode.Boolean: return((T)(object)(isNull ? new bool?() : wrapper.GetBoolean(reader, index))); case TypeCode.Char: return((T)(object)(isNull ? new char?() : wrapper.GetChar(reader, index))); case TypeCode.Byte: return((T)(object)(isNull ? new byte?() : wrapper.GetByte(reader, index))); case TypeCode.Int16: return((T)(object)(isNull ? new short?() : wrapper.GetInt16(reader, index))); case TypeCode.Int32: return((T)(object)(isNull ? new int?() : wrapper.GetInt32(reader, index))); case TypeCode.Int64: return((T)(object)(isNull ? new long?() : wrapper.GetInt64(reader, index))); case TypeCode.Decimal: return((T)(object)(isNull ? new decimal?() : wrapper.GetDecimal(reader, index))); case TypeCode.Double: return((T)(object)(isNull ? new double?() : wrapper.GetDouble(reader, index))); case TypeCode.String: return((T)(object)(isNull ? string.Empty : wrapper.GetString(reader, index))); case TypeCode.DateTime: return((T)(object)(isNull ? new DateTime?() : wrapper.GetDateTime(reader, index))); case TypeCode.Single: return((T)(object)(isNull ? new float?() : wrapper.GetFloat(reader, index))); default: return((T)wrapper.GetValue(reader, index)); } }
private int GetRecordCount(IDataReader reader, IRecordWrapper wrapper) { var count = 0; if (reader.Read()) { switch (reader.GetFieldType(0).GetDbType()) { case DbType.Decimal: count = (int)wrapper.GetDecimal(reader, 0); break; case DbType.Int32: count = wrapper.GetInt32(reader, 0); break; case DbType.Int64: count = (int)wrapper.GetInt64(reader, 0); break; } } return(count); }