@@ -20,7 +20,7 @@ public JetDataReader(DbDataReader dataReader)
2020#endif
2121 _wrappedDataReader = dataReader ;
2222 }
23-
23+
2424 public JetDataReader ( DbDataReader dataReader , int skipCount )
2525 : this ( dataReader )
2626 {
@@ -50,8 +50,8 @@ public override int FieldCount
5050 public override bool GetBoolean ( int ordinal )
5151 {
5252 var value = _wrappedDataReader . GetValue ( ordinal ) ;
53-
54- if ( JetConfiguration . UseDefaultValueOnDBNullConversionError &&
53+
54+ if ( JetConfiguration . UseDefaultValueOnDBNullConversionError &&
5555 Convert . IsDBNull ( value ) )
5656 {
5757 return default ;
@@ -77,40 +77,40 @@ public override bool GetBoolean(int ordinal)
7777 return ulongValue != 0 ;
7878 if ( value is decimal decimalValue )
7979 return decimalValue != 0 ;
80-
81- return ( bool ) value ;
80+
81+ return ( bool ) value ;
8282 }
8383
8484 public override byte GetByte ( int ordinal )
8585 {
8686 var value = _wrappedDataReader . GetValue ( ordinal ) ;
87-
88- if ( JetConfiguration . UseDefaultValueOnDBNullConversionError &&
87+
88+ if ( JetConfiguration . UseDefaultValueOnDBNullConversionError &&
8989 Convert . IsDBNull ( value ) )
9090 {
9191 return default ;
9292 }
93-
93+
9494 if ( value is byte byteValue )
9595 return byteValue ;
9696 if ( value is sbyte sbyteValue )
97- return checked ( ( byte ) sbyteValue ) ;
97+ return checked ( ( byte ) sbyteValue ) ;
9898 if ( value is short shortValue )
99- return checked ( ( byte ) shortValue ) ;
99+ return checked ( ( byte ) shortValue ) ;
100100 if ( value is ushort ushortValue )
101- return checked ( ( byte ) ushortValue ) ;
101+ return checked ( ( byte ) ushortValue ) ;
102102 if ( value is int intValue )
103- return checked ( ( byte ) intValue ) ;
103+ return checked ( ( byte ) intValue ) ;
104104 if ( value is uint uintValue )
105- return checked ( ( byte ) uintValue ) ;
105+ return checked ( ( byte ) uintValue ) ;
106106 if ( value is long longValue )
107- return checked ( ( byte ) longValue ) ;
107+ return checked ( ( byte ) longValue ) ;
108108 if ( value is ulong ulongValue )
109- return checked ( ( byte ) ulongValue ) ;
109+ return checked ( ( byte ) ulongValue ) ;
110110 if ( value is decimal decimalValue )
111- return ( byte ) decimalValue ;
112-
113- return ( byte ) value ;
111+ return ( byte ) decimalValue ;
112+
113+ return ( byte ) value ;
114114 }
115115
116116 public override long GetBytes ( int ordinal , long dataOffset , byte [ ] ? buffer , int bufferOffset , int length )
@@ -125,7 +125,7 @@ public override char GetChar(int ordinal)
125125 return JetConfiguration . UseDefaultValueOnDBNullConversionError &&
126126 Convert . IsDBNull ( value )
127127 ? default
128- : ( char ) value ;
128+ : ( char ) value ;
129129 }
130130
131131 public override long GetChars ( int ordinal , long dataOffset , char [ ] ? buffer , int bufferOffset , int length )
@@ -135,7 +135,7 @@ public override long GetChars(int ordinal, long dataOffset, char[]? buffer, int
135135 {
136136 return 0 ;
137137 }
138-
138+
139139 return _wrappedDataReader . GetChars ( ordinal , dataOffset , buffer , bufferOffset , length ) ;
140140 }
141141
@@ -148,7 +148,7 @@ public override DateTime GetDateTime(int ordinal)
148148 // Since DATETIME values are really just DOUBLE values internally in Jet, we explicitly convert those vales
149149 // to DOUBLE in the most outer SELECT projections as a workaround.
150150 var value = _wrappedDataReader . GetValue ( ordinal ) ;
151-
151+
152152 if ( JetConfiguration . UseDefaultValueOnDBNullConversionError &&
153153 Convert . IsDBNull ( value ) )
154154 return default ;
@@ -158,15 +158,15 @@ public override DateTime GetDateTime(int ordinal)
158158 // Round to milliseconds.
159159 return new DateTime (
160160 JetConfiguration . TimeSpanOffset . Ticks +
161- ( long ) ( Math . Round (
162- ( decimal ) ( long ) ( ( decimal ) doubleValue * TimeSpan . TicksPerDay ) /
161+ ( long ) ( Math . Round (
162+ ( decimal ) ( long ) ( ( decimal ) doubleValue * TimeSpan . TicksPerDay ) /
163163 TimeSpan . TicksPerMillisecond ,
164164 0 ,
165165 MidpointRounding . AwayFromZero ) *
166166 TimeSpan . TicksPerMillisecond ) ) ;
167167 }
168168
169- return ( DateTime ) value ;
169+ return ( DateTime ) value ;
170170 }
171171
172172 public virtual TimeSpan GetTimeSpan ( int ordinal )
@@ -261,7 +261,7 @@ public override string GetName(int ordinal)
261261
262262 public override int GetOrdinal ( string name )
263263 => _wrappedDataReader . GetOrdinal ( name ) ;
264-
264+
265265 public override DataTable GetSchemaTable ( )
266266 => _wrappedDataReader . GetSchemaTable ( ) ;
267267
@@ -271,13 +271,13 @@ public override string GetString(int ordinal)
271271 return JetConfiguration . UseDefaultValueOnDBNullConversionError &&
272272 Convert . IsDBNull ( value )
273273 ? string . Empty
274- : ( string ) value ;
274+ : ( string ) value ;
275275 }
276276
277277 public override object GetValue ( int ordinal )
278278 {
279279 var fieldType = GetFieldType ( ordinal ) ;
280-
280+
281281 if ( fieldType == typeof ( bool ) )
282282 return GetBoolean ( ordinal ) ;
283283 if ( fieldType == typeof ( byte ) )
@@ -325,10 +325,10 @@ public override object GetValue(int ordinal)
325325 public override int GetValues ( object [ ] values )
326326 {
327327 var count = Math . Min ( ( values ?? throw new ArgumentNullException ( nameof ( values ) ) ) . Length , FieldCount ) ;
328-
328+
329329 for ( var i = 0 ; i < count ; i ++ )
330330 values [ i ] = GetValue ( i ) ;
331-
331+
332332 return count ;
333333 }
334334
@@ -340,7 +340,7 @@ public override bool IsClosed
340340
341341 public override bool IsDBNull ( int ordinal )
342342 => _wrappedDataReader . IsDBNull ( ordinal ) ||
343- JetConfiguration . IntegerNullValue != null && ( ( int ) JetConfiguration . IntegerNullValue ) . Equals ( GetValue ( ordinal ) ) ;
343+ JetConfiguration . IntegerNullValue != null && ( ( int ) JetConfiguration . IntegerNullValue ) . Equals ( GetValue ( ordinal ) ) ;
344344
345345 public override bool NextResult ( )
346346 => _wrappedDataReader . NextResult ( ) ;
@@ -356,5 +356,23 @@ public override object this[string name]
356356
357357 public override object this [ int ordinal ]
358358 => _wrappedDataReader [ ordinal ] ;
359+
360+ public override T GetFieldValue < T > ( int ordinal )
361+ {
362+ if ( typeof ( T ) == typeof ( DateTime ) )
363+ {
364+ return ( T ) ( object ) GetDateTime ( ordinal ) ;
365+ }
366+ if ( typeof ( T ) == typeof ( TimeSpan ) )
367+ {
368+ return ( T ) ( object ) GetTimeSpan ( ordinal ) ;
369+ }
370+ if ( typeof ( T ) == typeof ( DateTimeOffset ) )
371+ {
372+ return ( T ) ( object ) GetDateTimeOffset ( ordinal ) ;
373+ }
374+
375+ return ( T ) GetValue ( ordinal ) ;
376+ }
359377 }
360378}
0 commit comments