我想将 C#.NET 存储ulong
到 T-SQL 数据库中。我没有看到任何这样做的规定,因为 SQLbigint
具有与正常相同的 Min/Max 值long
。
有什么办法可以做到这一点吗?还是抓住OverflowException
我唯一的希望?
这应该回答你的问题:
您将使用 BigInt,您只需要小心在 C# 中如何将有符号类型转换回无符号类型
// This has not been tested
unchecked
{
myUlong = myDataReader.GetInt64(...);
}
...
另一种可能性是使用长度为 8 的 VarBinary,然后在 C# 中将字节转换为 ulong
我知道这是不一样的,但这样做会:
select convert(decimal(38, 0), 12345678901234567890123456789012345678)
无符号长整数的最大值似乎是 18,446,744,073,709,551,615,这比这个十进制可以存储的要少得多。转换可能会出现问题,但我确信您的应用程序中的几个包装函数会很快对其进行排序。
对我来说,尼尔 N 的解决方案不起作用。Visual Studio 一直抱怨我无法long
为ulong
变量赋值,无论unchecked
.
最终起作用的只是
ulong fileSize = (ulong)(long)reader["fileSize"];
(没有unchecked
)。
在 SQLite DB 中,该值存储为long
,因此非常高的值变为负数,并且在 SQL 端对它们进行排序失败。但是在获得ulong
价值之后,Linq 可以发挥它的魔力
items = items.OrderByDescending(x => x.FileSize).ToList();