SqlDataReader和长列的奇怪行为

时间:2013-11-14 06:48:20

标签: 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);
}

我的所有模特都使用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

2 个答案:

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