为什么在将对象转换为整数时会出现InvalidCastException?

时间:2009-10-03 02:58:13

标签: c# asp.net sql-server casting

我有一个奇怪的问题,这是设置:

ASP.NET 3.5 app / MSSQLSERVER 2008后端。

我从我的代码调用了ExecuteScalar,它返回了一个对象,然后我尝试将该对象强制转换为int(我实际上有一个泛型方法

 T ConvertDBValue<T>(object o) {...}

,但那并不重要。)

ExecuteScalar正在点击以下内容:

...  
insert into ...
select scope_identity()

我的主键是一个标识字段,并返回85.接下来我得到的是InvalidCastException试图将85转换为int。

解决方案是显式创建一个INT变量,并在从sproc返回之前为其分配SCOPE_IDENTITY(),如下所示:

...  
DECLARE @x int
insert into ...
select @x = scope_identity()
select @x

有人可以告诉我第一种方法有什么问题,为什么它不会将85转换为int?

1 个答案:

答案 0 :(得分:6)

scope_identity()实际上返回了一个(TSQL)BIGINT(之前我已经被它抓住了!)

所以你的代码试图将BIGINT转换为int。