DbDataReader.GetFieldValue<DateTime> выдает исключение приведения
У меня есть следующий метод:
public static T Get<T>(this DbDataReader reader, int ordinal, Func<T> @default)
{
if(reader.IsDBNull(ordinal))
return @default();
return reader.GetFieldValue<T>(ordinal);
}
Когда я пытаюсь вызвать это с T=DateTime
Я получаю следующее исключение:
System.InvalidCastException was unhandled by user code
HResult=-2147467262
Message=Specified cast is not valid.
Source=System.Data
StackTrace:
at System.Data.Common.DbDataReader.GetFieldValue[T](Int32 ordinal)
...
Кажется, что метод отлично работает для других типов, таких как строки и числовые типы. Есть ли общий GetFieldValue<T>
метод просто не работает на свидания, или я что-то здесь не так сделал?
Я исправил это, обращаясь с DateTime
случай с использованием конкретного GetDateTime
вместо этого, но все же хотел бы знать, смогу ли я как-нибудь избавиться от этого надоедливого хака.
public static T Get<T>(this DbDataReader reader, int ordinal, Func<T> @default)
{
if(reader.IsDBNull(ordinal))
return @default();
switch(Type.GetTypeCode(typeof(T)))
{
case TypeCode.DateTime:
return (T)(object)reader.GetDateTime(ordinal);
default:
return reader.GetFieldValue<T>(ordinal);
}
}