如何将 SQL bigint 转换为等效的 C#

本文关键字:转换 SQL bigint | 更新日期: 2023-09-27 18:26:36

我正在尝试将 bigint 从 SQL Server 转换为 c# 中的等效项,但 Visual Studio 一直强迫我尝试将其转换为 int,这引发了"指定的强制转换无效"错误。我试图将其转换为 long、Int64、int 等。这样做的正确方法是什么?我的代码如下所示:

var id = 0;
//Omitted code
if (reader.Read())
{
    id = (int) reader["id"];
}
//More code

如何将 SQL bigint 转换为等效的 C#

following table所示,SQL Server 的bigint映射到 。NET的Int64结构:

long id = 0;
//Omitted code
if (reader.Read())
{
    id = (long) reader["id"];
}

如果这抛出了一个InvalidCastException,那么您的 dtaabase 中完全没有bigint,并且您可能希望使用 reader["id"].GetType() 检查调试器中的实际类型。

顺便说一下,请注意我如何将您的var id = 0;替换为long id = 0;,这实际上是声明一个 Int64 类型的变量而不是 Int32 .如果要使用 C# 变量推理,请确保以正确的方式进行:var id = 0L;

顺便说一句,如果你不想投射,你可以尝试这个替代方案:

long id = 0;
//Omitted code
if (reader.Read())
{
    id = reader.GetInt64(reader.GetOrdinal("id"));
}

使用 Int64 .

来源:"System.Data.SqlTypes 命名空间">

也许问题是你对var的初始声明。这是一个隐式类型变量,在第一次使用时分配。并且假定它是一个 int,因为您将其分配给 0。

将声明替换为Int64 or long id = 0,您应该没问题