1

我今天偶然发现了这个东西:

我有一个小辅助方法,内容如下:

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 查询:

    SELECT
        Id,
        Created,
        CreatedById,
        LastModified,
        LastModifiedById,
        Deleted,
        DeletedById
    FROM dbo.MyTable
    WHERE Id = @id
4

2 回答 2

2

BIGINT 列应作为 long 返回。我怀疑您的代码中存在错误-也许您没有从您认为正在使用的数据库中获取您认为的列,或者您的 SQL 查询正在转换列值。

于 2013-11-14T08:04:48.770 回答
1

你可以使用 Convert.ChnageType 实现

public T Change<T>(IDataReader rd,string fieldName)
{
    return (T)Convert.ChangeType(rd[fieldName], typeof(T));
}
于 2013-11-14T06:55:46.083 回答