15

我想将 C#.NET 存储ulong到 T-SQL 数据库中。我没有看到任何这样做的规定,因为 SQLbigint具有与正常相同的 Min/Max 值long

有什么办法可以做到这一点吗?还是抓住OverflowException我唯一的希望?

4

3 回答 3

9

这应该回答你的问题:

http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/ff08c190-a981-4896-9542-3f64b95a84a2/

您将使用 BigInt,您只需要小心在 C# 中如何将有符号类型转换回无符号类型

// This has not been tested
unchecked
{
    myUlong = myDataReader.GetInt64(...);
}

...

另一种可能性是使用长度为 8 的 VarBinary,然后在 C# 中将字节转换为 ulong

于 2010-06-02T14:42:10.143 回答
6

我知道这是不一样的,但这样做会:

select convert(decimal(38, 0), 12345678901234567890123456789012345678)

无符号长整数的最大值似乎是 18,446,744,073,709,551,615,这比这个十进制可以存储的要少得多。转换可能会出现问题,但我确信您的应用程序中的几个包装函数会很快对其进行排序。

于 2010-06-02T14:41:58.447 回答
0

对我来说,尼尔 N 的解决方案不起作用。Visual Studio 一直抱怨我无法longulong变量赋值,无论unchecked.

最终起作用的只是

ulong fileSize = (ulong)(long)reader["fileSize"];

(没有unchecked)。

在 SQLite DB 中,该值存储为long,因此非常高的值变为负数,并且在 SQL 端对它们进行排序失败。但是在获得ulong价值之后,Linq 可以发挥它的魔力

items = items.OrderByDescending(x => x.FileSize).ToList();
于 2019-01-23T08:34:14.403 回答