C# SqlDataReader和长列的奇怪行为

C# SqlDataReader和长列的奇怪行为,c#,sql,sql-server-2012,C#,Sql,Sql Server 2012,我今天偶然发现了一件事: 我有一个具有以下内容的小助手方法: private static T GetValOrDefault<T>(this IDataRecord rdr, string name) { return rdr[name] is T ? (T) rdr[name] : default(T); } 您可以使用Convert.ChnageType工具 public T Change<T>(IDataReader rd,string fieldNam

我今天偶然发现了一件事:

我有一个具有以下内容的小助手方法:

private static T GetValOrDefault<T>(this IDataRecord rdr, string name)
{
    return rdr[name] is T ? (T) rdr[name] : default(T);
}

您可以使用Convert.ChnageType工具

public T Change<T>(IDataReader rd,string fieldName)
{
    return (T)Convert.ChangeType(rd[fieldName], typeof(T));
}
public T更改(IDataReader rd,字符串字段名)
{
返回(T)Convert.ChangeType(rd[fieldName],typeof(T));
}

BIGINT列应作为long返回。我怀疑您的代码中有一个bug-可能您没有从您认为正在使用的数据库中获取您认为是的列,或者您的SQL查询正在转换列值。

您是对的,我使用了一个带有
DECLARE@temp AS table(Id int
public T Change<T>(IDataReader rd,string fieldName)
{
    return (T)Convert.ChangeType(rd[fieldName], typeof(T));
}