代码之家  ›  专栏  ›  技术社区  ›  roman m

为什么我在将对象强制转换为整数时得到InvalidCastException?

  •  1
  • roman m  · 技术社区  · 16 年前

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

    ASP.NET 3.5 app/MSSQLServer2008后端。

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

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

    ,但这并不重要)。

    ExecuteScalar正在执行以下存储过程:

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

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

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

    有人能告诉我我的第一种方法有什么问题吗?为什么不能将85转换为int?

    1 回复  |  直到 16 年前
        1
  •  6
  •   Mitch Wheat    16 年前

    scope_identity() 实际返回一个(TSQL) BIGINT

    因此,您的代码试图将BIGINT转换为int。

    推荐文章