如何将SQL bigint强制转换为C#等价物

时间:2014-10-15 21:06:01

标签: c# sql casting

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

var id = 0;

//Omitted code

if (reader.Read())
{
    id = (int) reader["id"];
}

//More code

3 个答案:

答案 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

来源:"System.Data.SqlTypes Namespace"

答案 2 :(得分:1)

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

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