@@ -236,7 +236,7 @@ private Delegate CreateGetterDelegate<TValue>(int col)
236
236
private ValueGetter < bool > CreateBooleanGetterDelegate ( ColInfo colInfo )
237
237
{
238
238
int columnIndex = GetColumnIndex ( colInfo ) ;
239
- return ( ref bool value ) => value = DataReader . GetBoolean ( columnIndex ) ;
239
+ return ( ref bool value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : DataReader . GetBoolean ( columnIndex ) ;
240
240
}
241
241
242
242
private ValueGetter < byte > CreateByteGetterDelegate ( ColInfo colInfo )
@@ -254,61 +254,61 @@ private ValueGetter<DateTime> CreateDateTimeGetterDelegate(ColInfo colInfo)
254
254
private ValueGetter < double > CreateDoubleGetterDelegate ( ColInfo colInfo )
255
255
{
256
256
int columnIndex = GetColumnIndex ( colInfo ) ;
257
- return ( ref double value ) => value = DataReader . GetDouble ( columnIndex ) ;
257
+ return ( ref double value ) => value = DataReader . IsDBNull ( columnIndex ) ? double . NaN : DataReader . GetDouble ( columnIndex ) ;
258
258
}
259
259
260
260
private ValueGetter < short > CreateInt16GetterDelegate ( ColInfo colInfo )
261
261
{
262
262
int columnIndex = GetColumnIndex ( colInfo ) ;
263
- return ( ref short value ) => value = DataReader . GetInt16 ( columnIndex ) ;
263
+ return ( ref short value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : DataReader . GetInt16 ( columnIndex ) ;
264
264
}
265
265
266
266
private ValueGetter < int > CreateInt32GetterDelegate ( ColInfo colInfo )
267
267
{
268
268
int columnIndex = GetColumnIndex ( colInfo ) ;
269
- return ( ref int value ) => value = DataReader . GetInt32 ( columnIndex ) ;
269
+ return ( ref int value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : DataReader . GetInt32 ( columnIndex ) ;
270
270
}
271
271
272
272
private ValueGetter < long > CreateInt64GetterDelegate ( ColInfo colInfo )
273
273
{
274
274
int columnIndex = GetColumnIndex ( colInfo ) ;
275
- return ( ref long value ) => value = DataReader . GetInt64 ( columnIndex ) ;
275
+ return ( ref long value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : DataReader . GetInt64 ( columnIndex ) ;
276
276
}
277
277
278
278
private ValueGetter < sbyte > CreateSByteGetterDelegate ( ColInfo colInfo )
279
279
{
280
280
int columnIndex = GetColumnIndex ( colInfo ) ;
281
- return ( ref sbyte value ) => value = ( sbyte ) DataReader . GetByte ( columnIndex ) ;
281
+ return ( ref sbyte value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : ( sbyte ) DataReader . GetByte ( columnIndex ) ;
282
282
}
283
283
284
284
private ValueGetter < float > CreateSingleGetterDelegate ( ColInfo colInfo )
285
285
{
286
286
int columnIndex = GetColumnIndex ( colInfo ) ;
287
- return ( ref float value ) => value = DataReader . GetFloat ( columnIndex ) ;
287
+ return ( ref float value ) => value = DataReader . IsDBNull ( columnIndex ) ? float . NaN : DataReader . GetFloat ( columnIndex ) ;
288
288
}
289
289
290
290
private ValueGetter < ReadOnlyMemory < char > > CreateStringGetterDelegate ( ColInfo colInfo )
291
291
{
292
292
int columnIndex = GetColumnIndex ( colInfo ) ;
293
- return ( ref ReadOnlyMemory < char > value ) => value = DataReader . GetString ( columnIndex ) . AsMemory ( ) ;
293
+ return ( ref ReadOnlyMemory < char > value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : DataReader . GetString ( columnIndex ) . AsMemory ( ) ;
294
294
}
295
295
296
296
private ValueGetter < ushort > CreateUInt16GetterDelegate ( ColInfo colInfo )
297
297
{
298
298
int columnIndex = GetColumnIndex ( colInfo ) ;
299
- return ( ref ushort value ) => value = ( ushort ) DataReader . GetInt16 ( columnIndex ) ;
299
+ return ( ref ushort value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : ( ushort ) DataReader . GetInt16 ( columnIndex ) ;
300
300
}
301
301
302
302
private ValueGetter < uint > CreateUInt32GetterDelegate ( ColInfo colInfo )
303
303
{
304
304
int columnIndex = GetColumnIndex ( colInfo ) ;
305
- return ( ref uint value ) => value = ( uint ) DataReader . GetInt32 ( columnIndex ) ;
305
+ return ( ref uint value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : ( uint ) DataReader . GetInt32 ( columnIndex ) ;
306
306
}
307
307
308
308
private ValueGetter < ulong > CreateUInt64GetterDelegate ( ColInfo colInfo )
309
309
{
310
310
int columnIndex = GetColumnIndex ( colInfo ) ;
311
- return ( ref ulong value ) => value = ( ulong ) DataReader . GetInt64 ( columnIndex ) ;
311
+ return ( ref ulong value ) => value = DataReader . IsDBNull ( columnIndex ) ? default : ( ulong ) DataReader . GetInt64 ( columnIndex ) ;
312
312
}
313
313
314
314
private int GetColumnIndex ( ColInfo colInfo )
0 commit comments