0
+ − 1 using System;
+ − 2 using System.Data;
+ − 3 using System.Data.SqlTypes;
+ − 4
+ − 5 namespace BLToolkit.Mapping
+ − 6 {
+ − 7 using Data;
+ − 8
+ − 9 public class DataReaderMapper : IMapDataSource
+ − 10 {
+ − 11 public DataReaderMapper(MappingSchema mappingSchema, IDataReader dataReader)
+ − 12 {
+ − 13 _mappingSchema = mappingSchema;
+ − 14 _dataReader = dataReader;
+ − 15 _dataReaderEx = dataReader as IDataReaderEx;
+ − 16 }
+ − 17
+ − 18 readonly IDataReaderEx _dataReaderEx;
+ − 19
+ − 20 readonly IDataReader _dataReader;
+ − 21 public IDataReader DataReader
+ − 22 {
+ − 23 get { return _dataReader; }
+ − 24 }
+ − 25
+ − 26 readonly MappingSchema _mappingSchema;
+ − 27 public MappingSchema MappingSchema
+ − 28 {
+ − 29 get { return _mappingSchema; }
+ − 30 }
+ − 31
+ − 32 #region IMapDataSource Members
+ − 33
+ − 34 public virtual int Count
+ − 35 {
+ − 36 get { return _dataReader.FieldCount; }
+ − 37 }
+ − 38
+ − 39 public virtual Type GetFieldType(int index)
+ − 40 {
+ − 41 return _dataReader.GetFieldType(index);
+ − 42 }
+ − 43
+ − 44 public virtual string GetName(int index)
+ − 45 {
+ − 46 return _dataReader.GetName(index);
+ − 47 }
+ − 48
+ − 49 public virtual int GetOrdinal(string name)
+ − 50 {
+ − 51 return _dataReader.GetOrdinal(name);
+ − 52 }
+ − 53
+ − 54 public virtual object GetValue(object o, int index)
+ − 55 {
+ − 56 var value = _dataReader.GetValue(index);
+ − 57 return value is DBNull? null: value;
+ − 58 }
+ − 59
+ − 60 public virtual object GetValue(object o, string name)
+ − 61 {
+ − 62 var value = _dataReader[name];
+ − 63 return value is DBNull? null: value;
+ − 64 }
+ − 65
+ − 66 public virtual bool IsNull (object o, int index) { return _dataReader.IsDBNull(index); }
+ − 67 public virtual bool SupportsTypedValues(int index) { return true; }
+ − 68
+ − 69 // Simple type getters.
+ − 70 //
+ − 71 [CLSCompliant(false)]
+ − 72 public virtual SByte GetSByte (object o, int index) { return _mappingSchema.ConvertToSByte(GetValue(o, index)); }
+ − 73 public virtual Int16 GetInt16 (object o, int index) { return _dataReader.GetInt16 (index); }
+ − 74 public virtual Int32 GetInt32 (object o, int index) { return _dataReader.GetInt32 (index); }
+ − 75 public virtual Int64 GetInt64 (object o, int index) { return _dataReader.GetInt64 (index); }
+ − 76
+ − 77 public virtual Byte GetByte (object o, int index) { return _dataReader.GetByte (index); }
+ − 78 [CLSCompliant(false)]
+ − 79 public virtual UInt16 GetUInt16 (object o, int index) { return _mappingSchema.ConvertToUInt16(GetValue(o, index)); }
+ − 80 [CLSCompliant(false)]
+ − 81 public virtual UInt32 GetUInt32 (object o, int index) { return _mappingSchema.ConvertToUInt32(GetValue(o, index)); }
+ − 82 [CLSCompliant(false)]
+ − 83 public virtual UInt64 GetUInt64 (object o, int index) { return _mappingSchema.ConvertToUInt64(GetValue(o, index)); }
+ − 84
+ − 85 public virtual Boolean GetBoolean (object o, int index) { return _dataReader.GetBoolean (index); }
+ − 86 public virtual Char GetChar (object o, int index) { return _dataReader.GetChar (index); }
+ − 87 public virtual Single GetSingle (object o, int index) { return _dataReader.GetFloat (index); }
+ − 88 public virtual Double GetDouble (object o, int index) { return _dataReader.GetDouble (index); }
+ − 89 public virtual Decimal GetDecimal (object o, int index) { return _dataReader.GetDecimal (index); }
+ − 90 public virtual Guid GetGuid (object o, int index) { return _dataReader.GetGuid (index); }
+ − 91 public virtual DateTime GetDateTime(object o, int index) { return _dataReader.GetDateTime(index); }
+ − 92
+ − 93 public virtual DateTimeOffset GetDateTimeOffset(object o, int index)
+ − 94 {
+ − 95 return _dataReaderEx != null?
+ − 96 _dataReaderEx.GetDateTimeOffset(index):
+ − 97 _mappingSchema.ConvertToDateTimeOffset(_dataReader.GetValue(index));
+ − 98 }
+ − 99
+ − 100 // Nullable type getters.
+ − 101 //
+ − 102 [CLSCompliant(false)]
+ − 103 public virtual SByte? GetNullableSByte (object o, int index) { return _dataReader.IsDBNull(index)? null: _mappingSchema.ConvertToNullableSByte(GetValue(o, index)); }
+ − 104 public virtual Int16? GetNullableInt16 (object o, int index) { return _dataReader.IsDBNull(index)? null: (Int16?)_dataReader.GetInt16 (index); }
+ − 105 public virtual Int32? GetNullableInt32 (object o, int index) { return _dataReader.IsDBNull(index)? null: (Int32?)_dataReader.GetInt32 (index); }
+ − 106 public virtual Int64? GetNullableInt64 (object o, int index) { return _dataReader.IsDBNull(index)? null: (Int64?)_dataReader.GetInt64 (index); }
+ − 107
+ − 108 public virtual Byte? GetNullableByte (object o, int index) { return _dataReader.IsDBNull(index)? null: (Byte?) _dataReader.GetByte (index); }
+ − 109 [CLSCompliant(false)]
+ − 110 public virtual UInt16? GetNullableUInt16 (object o, int index) { return _dataReader.IsDBNull(index)? null: _mappingSchema.ConvertToNullableUInt16(GetValue(o, index)); }
+ − 111 [CLSCompliant(false)]
+ − 112 public virtual UInt32? GetNullableUInt32 (object o, int index) { return _dataReader.IsDBNull(index)? null: _mappingSchema.ConvertToNullableUInt32(GetValue(o, index)); }
+ − 113 [CLSCompliant(false)]
+ − 114 public virtual UInt64? GetNullableUInt64 (object o, int index) { return _dataReader.IsDBNull(index)? null: _mappingSchema.ConvertToNullableUInt64(GetValue(o, index)); }
+ − 115
+ − 116 public virtual Boolean? GetNullableBoolean (object o, int index) { return _dataReader.IsDBNull(index)? null: (Boolean?) _dataReader.GetBoolean (index); }
+ − 117 public virtual Char? GetNullableChar (object o, int index) { return _dataReader.IsDBNull(index)? null: (Char?) _dataReader.GetChar (index); }
+ − 118 public virtual Single? GetNullableSingle (object o, int index) { return _dataReader.IsDBNull(index)? null: (Single?) _dataReader.GetFloat (index); }
+ − 119 public virtual Double? GetNullableDouble (object o, int index) { return _dataReader.IsDBNull(index)? null: (Double?) _dataReader.GetDouble (index); }
+ − 120 public virtual Decimal? GetNullableDecimal (object o, int index) { return _dataReader.IsDBNull(index)? null: (Decimal?) _dataReader.GetDecimal (index); }
+ − 121 public virtual Guid? GetNullableGuid (object o, int index) { return _dataReader.IsDBNull(index)? null: (Guid?) _dataReader.GetGuid (index); }
+ − 122 public virtual DateTime? GetNullableDateTime(object o, int index) { return _dataReader.IsDBNull(index)? null: (DateTime?)_dataReader.GetDateTime(index); }
+ − 123 public virtual DateTimeOffset? GetNullableDateTimeOffset(object o, int index)
+ − 124 {
+ − 125 return _dataReader.IsDBNull(index)? null:
+ − 126 _dataReaderEx != null? _dataReaderEx.GetDateTimeOffset(index):
+ − 127 _mappingSchema.ConvertToNullableDateTimeOffset(_dataReader.GetValue(index));
+ − 128 }
+ − 129
+ − 130 #if !SILVERLIGHT
+ − 131
+ − 132 // SQL type getters.
+ − 133 //
+ − 134 public virtual SqlByte GetSqlByte (object o, int index) { return _dataReader.IsDBNull(index)? SqlByte. Null: _dataReader.GetByte (index); }
+ − 135 public virtual SqlInt16 GetSqlInt16 (object o, int index) { return _dataReader.IsDBNull(index)? SqlInt16. Null: _dataReader.GetInt16 (index); }
+ − 136 public virtual SqlInt32 GetSqlInt32 (object o, int index) { return _dataReader.IsDBNull(index)? SqlInt32. Null: _dataReader.GetInt32 (index); }
+ − 137 public virtual SqlInt64 GetSqlInt64 (object o, int index) { return _dataReader.IsDBNull(index)? SqlInt64. Null: _dataReader.GetInt64 (index); }
+ − 138 public virtual SqlSingle GetSqlSingle (object o, int index) { return _dataReader.IsDBNull(index)? SqlSingle. Null: _dataReader.GetFloat (index); }
+ − 139 public virtual SqlBoolean GetSqlBoolean (object o, int index) { return _dataReader.IsDBNull(index)? SqlBoolean. Null: _dataReader.GetBoolean (index); }
+ − 140 public virtual SqlDouble GetSqlDouble (object o, int index) { return _dataReader.IsDBNull(index)? SqlDouble. Null: _dataReader.GetDouble (index); }
+ − 141 public virtual SqlDateTime GetSqlDateTime(object o, int index) { return _dataReader.IsDBNull(index)? SqlDateTime.Null: _dataReader.GetDateTime(index); }
+ − 142 public virtual SqlDecimal GetSqlDecimal (object o, int index) { return _dataReader.IsDBNull(index)? SqlDecimal. Null: _dataReader.GetDecimal (index); }
+ − 143 public virtual SqlMoney GetSqlMoney (object o, int index) { return _dataReader.IsDBNull(index)? SqlMoney. Null: _dataReader.GetDecimal (index); }
+ − 144 public virtual SqlGuid GetSqlGuid (object o, int index) { return _dataReader.IsDBNull(index)? SqlGuid. Null: _dataReader.GetGuid (index); }
+ − 145 public virtual SqlString GetSqlString (object o, int index) { return _dataReader.IsDBNull(index)? SqlString. Null: _dataReader.GetString (index); }
+ − 146
+ − 147 #endif
+ − 148
+ − 149 #endregion
+ − 150 }
+ − 151 }