Эти методы расширения относятся к DataRow
- т.е. DataTable
... , а не IDataReader
(и т. Д.).
Вы можете делать то, что вы хотите здесь, с условным условием - IIf
в VB или в C #:
double? val = reader.IsDBNull(index) ? (double?) null : reader.GetDouble(index);
long? vol = reader.IsDBNull(index) ? (long?)null : reader.GetInt64(index);
Конечно, вы можете обернуть их как служебные методы, возможно, как свои собственные пользовательские методы расширения в IDataReader
:
public static class DataReaderExtensions
{
public static int? ReadNullableInt32(this IDataReader reader, int index)
{
return reader.IsDBNull(index) ? (int?)null : reader.GetInt32(index);
}
public static long? ReadNullableInt64(this IDataReader reader, int index)
{
return reader.IsDBNull(index) ? (long?)null : reader.GetInt64(index);
}
public static double? ReadNullableDouble(this IDataReader reader, int index)
{
return reader.IsDBNull(index) ? (double?)null : reader.GetDouble(index);
}
public static string ReadNullableString(this IDataReader reader, int index)
{
return reader.IsDBNull(index) ? null : reader.GetString(index);
}
// etc
}
(извините за использование c # для примеров - но вы, вероятно, читаете c # лучше, чем я могу написать точный vb.net)