DbDataReader.GetFieldValue <datetime>抛出强制转换异常</datetime>

时间:2014-11-14 10:24:21

标签: c# generics sqldatareader

我有以下方法:

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 个答案:

没有答案