我今天偶然发现了这件事:
我有一个小帮手方法,包括以下内容:
private static T GetValOrDefault<T>(this IDataRecord rdr, string name)
{
return rdr[name] is T ? (T) rdr[name] : default(T);
}
我的所有模特都使用public long Id { get; set; }
SQL服务器列为BIGINT
不知怎的,GetValOrDefault<long>("Id")
返回'0',我继续使用那里的立即窗口,看看rdr["Id"].GetType()
这是Int32
...为什么会发生这种情况的任何想法?
我看到的任何地方,它都说BIGINT = INT64 = long
......不知怎的,SqlDataReader给了我int32 ......
编辑:
那是我的Sql Query:
SELECT
Id,
Created,
CreatedById,
LastModified,
LastModifiedById,
Deleted,
DeletedById
FROM dbo.MyTable
WHERE Id = @id
答案 0 :(得分:2)
BIGINT列应该作为long返回。我怀疑你的代码中有一个错误 - 也许你没有从你认为正在使用的数据库中得到你认为的列,或者你的SQL查询可能正在使用列值。
答案 1 :(得分:1)
您可以使用Convert.ChnageType工具
public T Change<T>(IDataReader rd,string fieldName)
{
return (T)Convert.ChangeType(rd[fieldName], typeof(T));
}