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);
    }
}

0 ответов

Другие вопросы по тегам