我正在尝试将一个bigint从SQL Server转换为c#中的等价物,但Visual Studio一直强迫我尝试将其强制转换为int,这会引发“指定的强制转换无效”错误。我试图将它转换为long,Int64,int等。这样做的正确方法是什么?我的代码如下所示:
var id = 0;
//Omitted code
if (reader.Read())
{
id = (int) reader["id"];
}
//More code
答案 0 :(得分:8)
正如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
类型的变量而不是var id = 0L;
。如果您想使用C#变量推断,请确保以正确的方式进行:long id = 0;
//Omitted code
if (reader.Read())
{
id = reader.GetInt64(reader.GetOrdinal("id"));
}
顺便说一句,如果你不想演员,你可以试试这个替代方案:
{{1}}
答案 1 :(得分:1)
使用Int64
。
答案 2 :(得分:1)
问题可能是您使用var
的初始声明。这是一个隐式类型变量,在第一次使用时分配。并且它被假定为一个int,因为你将其赋值为0。
将声明替换为Int64 or long id = 0
,你应该没问题