C#中的bigint相当于什么?

282

当处理SQL Server数据库中的bigint值时,我应该在C#中使用什么?

12个回答

450

这对应于 长整型 (或 Int64),即64位整数。

虽然如果数据库中的数字足够小,你意外地使用了 Int32 等类型也没关系。但是 Int64 绝对可以容纳它。

如果使用了较小的类型而需要完整大小时会出现的错误呢?堆栈溢出! 太棒了!


122
确定不是整数溢出吗? - luqui
11
更多数据类型的良好参考资料:http://msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx - Entree
6
在C#中,"long"不需要大写。 - Shawn Kovac

80

Int64 直接对应 BigInt

来源


4
"long"是Int64的另一个名称。 - Asad
18
是的, long 关键字是 System.Int64 的别名。 - Anon.

14

我刚刚有一个脚本,返回了插入操作的主键并使用了

SELECT @@identity

我在使用 bigint 主键时,用 long 类型会出现类型转换错误,这也是我开始搜索的原因。至少在我的情况下,正确的答案是 select 语句返回的类型为 NUMERIC,即一个十进制类型。使用 long 将导致类型转换异常。

这就是要在多个谷歌搜索(甚至在 Stack Overflow 上)中检查答案的原因之一。

引用一位帮助过我的数据库管理员的话:

......BigInt 和 INT64 并不相同,尽管它们看起来很像。部分原因是 SQL 通常会将 Int/BigInt 转换为 Numeric 作为正常处理的一部分。所以当它转��� OLE 或 .NET 时,需要进行的转换是 NUMERIC 到 INT。

我们通常不注意,因为打印出来的值看起来是一样的。


谢谢你的数字提示.. 真的帮了我很大的忙! - jpshook
10
您遇到了一个类型转换错误,因为SCOPE_IDENTITY和@@IDENTITY返回的是NUMERIC(38, 0),而不是由于您的BigInt PK不适合C# Int64。换句话说,BigInt与Int64相同,但通过SCOPE_IDENTITY或@@IDENTITY返回的BigInt值可能会被提升为NUMERIC(38, 0)。 - Dan Hermann
谢谢Dan。FYI,SQL Azure(RTM)-12.0.2000.8和.NET v 4.5仍在发生。 - Gunnar
1
惊讶地看到没有人对丹的关于在 SQL Server 中标识值类型进行更正的评论,只需要在数据库端使用以下内容即可:SELECT CAST(@@IDENTITY as BIGINT) as IdentityINT64。 - dmarietta

9
使用长整型数据类型。

9
您可以使用long类型或 Int64 进行操作。

4

我认为相当于Int64。


2

int在SQL Maps中直接映射到int32,也称为原始类型,即C#中的int,而

bigint在Sql Server中直接映射到int64,也称为原始类型,即C#中的long

已定义从biginteger到integer的显式转换这里


-1

我成功地使用Convert.ToInt64将从数据库返回的(bigint)值进行了转换。

例如:

var Id = Convert.ToInt64(identityAsTable.Rows[0].Field<object>(0));

-2

对于大多数情况,它在c#中是长整型(int64)


1
这似乎只是现有答案的重复。 - Pang

-3

int(64)或long数据类型等同于BigInt。


这似乎只是现有答案的重复。 - Pang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接