我正在尝试将SQL Server中的bigint转换为C#中的等效类型,但Visual Studio一直强制我尝试将其转换为int,这会引发“指定的转换无效”错误。我已经尝试将其转换为long、Int64、int等类型。正确的做法是什么?我的代码如下:
var id = 0;
//Omitted code
if (reader.Read())
{
id = (int) reader["id"];
}
//More code
正如下表所示
,SQL Server的bigint
映射到.NET的Int64
结构:
long id = 0;
//Omitted code
if (reader.Read())
{
id = (long) reader["id"];
}
如果这里抛出了一个 InvalidCastException
,那么你的数据库中可能没有 bigint
类型的数据,你可能需要在调试器中使用 reader["id"].GetType()
来检查实际类型。
顺便提一下,你会注意到我用 long id = 0;
替换了你的 var id = 0;
,这实际上是声明了一个 Int64
类型的变量,而不是 Int32
。如果你想使用 C# 变量推断,请确保选择正确的方式:var id = 0L;
顺便说一句,如果你不想进行类型转换,你可以尝试这个替代方法:
long id = 0;
//Omitted code
if (reader.Read())
{
id = reader.GetInt64(reader.GetOrdinal("id"));
}
var
。这是一个隐式类型变量,只有在第一次使用时才会赋值。因为你将它赋值为0,所以它被认为是一个int类型。Int64或long id = 0
,问题就应该解决了。var
与匿名类型无关。 - undefinedvar x = new { .... }
)中使用var
,但是这里的id
从声明的那一刻起就是一个int
。它并没有匿名性可言。 - undefinedid
的类型是什么。 - undefined
id = Convert.ToInt64(reader["id"]);
可能吗? - undefinedreader["id"].GetType()
来查看您需要进行强制转换的实际类型。 - undefinedbigint
是一个64位整数,相当于C#中的long
。我们能看到您的SQL查询和表/数据库定义吗?您可能得到了一个错误的字段。 - undefinedlong
时会发生什么?你会得到运行时错误还是编译时错误? - undefined