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

标签 c# asp.net sql-server casting

我遇到了一个奇怪的问题,这是设置:

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/

相关文章:

c# - 能够更新数据集但无法提交对数据库的更改

c# - MVC、C# 中的小数符号问题?

C# 相当于 Google Maps API 的 computeArea

c# - 自定义 HTTP 响应、C# 和 .ajax()?

c# - 设置 Httpresponse 的 Response Body

sql-server - 为什么 SQL Server 给我的列大小是我请求的两倍?

c# - RegistryValue 在进行 Wix 次要升级后消失

C# 正则表达式问题 "unrecognized escape sequence"

c# - 将 jquery 添加到 Visual Studio 中的 "empty"Web 项目的最佳方法?

sql - 在使用 View 的查询中使用WITH NOLOCK 表提示 - 它是否在 View 内传播?