我遇到了一个奇怪的问题,这是设置:
ASP.NET 3.5 应用程序/MSSQLSERVER 2008 后端。
我从我的代码中调用了 ExecuteScalar,它返回了一个对象,然后我尝试将该对象转换为 int(我实际上有一个通用方法
T ConvertDBValue<T>(object o) {...}
,但这并不重要)。
ExecuteScalar 正在访问以下存储过程:
...
insert into ...
select scope_identity()
我的主键是一个身份字段,并返回 85。接下来我得到的是 InvalidCastException 试图将 85 转换为 int。
解决方案是显式创建一个 INT 变量,并在从存储过程返回它之前将 SCOPE_IDENTITY() 分配给它,如下所示:
...
DECLARE @x int
insert into ...
select @x = scope_identity()
select @x
谁能告诉我第一种方法有什么问题,为什么它不将 85 转换为 int?
最佳答案
scope_identity()
实际上返回一个 (TSQL) BIGINT
(我之前被这个捕获了!)
所以您的代码试图将 BIGINT 转换为 int。
关于c# - 为什么在将对象转换为整数时会出现 InvalidCastException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512661/