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

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 に答える