检索 scope_identity 时指定的强制转换无效

Posted

技术标签:

【中文标题】检索 scope_identity 时指定的强制转换无效【英文标题】:Specific cast is not valid, while retrieving scope_identity 【发布时间】:2011-03-02 22:45:58 【问题描述】:

我收到异常:“特定转换无效”,这是代码

con.Open();
string insertQuery = @"Insert into Tender (Name, Name1, Name2) values ('Val1','Val2','Val3');Select Scope_Identity();";

SqlCommand cmd = new SqlCommand(insertQuery, con);
cmd.ExecuteNonQuery();
tenderId = (int)cmd.ExecuteScalar();

【问题讨论】:

您是否尝试过将其拆分为两个 SqlCommand 对象?每个查询一个? 您确实意识到您正在执行 sql 两次,因此您插入了两次记录。只需运行 ExecuteScalar 方法。 【参考方案1】:

为了完整起见,您的代码示例存在三个问题。

1) 您通过调用ExecuteNonQueryExecuteScalar 执行了两次查询。因此,每次运行此函数时,您都将在表中插入两条记录。您的 SQL 虽然是两条不同的语句,但将一起运行,因此您只需要调用 ExecuteScalar

2)Scope_Identity()returns a decimal。您可以在查询结果上使用Convert.ToInt32,也可以将返回值转换为十进制然后转换为整数。

3) 确保将您的连接和命令对象包装在using 语句中,以便正确处理它们。

using (SqlConnection connection = new SqlConnection(connectionString))

    using (SqlCommand command = new SqlCommand(sql, connection))
    
        connection.Open();
        int tenderId = (int)(decimal)command.ExecuteScalar();
    

【讨论】:

【参考方案2】:

试试这个:-

con.Open();
string insertQuery = @"Insert into Tender (Name, Name1, Name2) values ('Val1','Val2','Val3');Select Scope_Identity();";

SqlCommand cmd = new SqlCommand(insertQuery, con);
tenderId = Convert.ToInt32(cmd.ExecuteScalar());

编辑

应该是这样,因为它正确地指出了 scope_identity() 返回一个 numeric(38,0) :-

tenderId = Convert.ToInt32(cmd.ExecuteScalar());

注意:您仍然需要删除:-

cmd.ExecuteNonQuery();

【讨论】:

Scope_Identity() 返回一个小数。直接投射不起作用,但双重投射将(int)(decimal)cmd.ExecuteScalar() 或简单地使用Convert.ToInt32 @anthony,是的,你是对的,我已经很久没有使用这种类型的代码了【参考方案3】:

首先测试以下内容:

object id = cmd.ExcuteScalar()

设置断点,查看id的类型。可能是Decimal,不能直接转换成int

【讨论】:

问题不是ID列,而是Scope_Identity()的返回值。但你对小数部分是正确的。【参考方案4】:

它需要 Convert.ToInt32(cmd.ExecuteScalar());

【讨论】:

以上是关于检索 scope_identity 时指定的强制转换无效的主要内容,如果未能解决你的问题,请参考以下文章

而不是SQL Server中的触发器丢失SCOPE_IDENTITY?

如何使用 Sql Server 2008 获取用于插入到 select 中的 scope_identity 列表?

在插入时插入 SCOPE_IDENTITY

微信中安卓手机点击链接强制跳转默认浏览器打开指定网页

插入值时的 SCOPE_IDENTITY

在OptionSet属性的FetchXML查询中,System.InvalidCastException(“指定的强制转换无效。”)