【问题标题】:Why am I getting InvalidCastException when casting object to integer?为什么将对象转换为整数时会出现 InvalidCastException?
【发布时间】:2009-10-03 02:58:13
【问题描述】:

我遇到了一个奇怪的问题,设置如下:

ASP.NET 3.5 应用程序/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?

【问题讨论】:

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


    【解决方案1】:

    scope_identity() 实际上返回一个(TSQL)BIGINT(我以前被这个抓住了!)

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

    【讨论】:

    • 它说它返回numeric(38,0),而不是bigint?无论哪种方式,您都可以在您的代码或 SQL 中解决这个问题。在 SQL 中,您可以这样做 SELECT CAST(SCOPE_IDENTITY() as int),或者在您的 C# 中,您可以这样做 int x = Convert.ToInt32(whatever)。但是,正如原始发布者所发现的那样,使用输出或返回参数当然会否定这个需求......
    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多