c# - 将 scope_identity() 与 ASP.NET 控件一起使用

标签 c# asp.net sql database

我已经构建了一个用于将一些数据输入到我的数据库中的表中的表单,现在我想插入该数据,并取回刚刚添加的记录的 ID(这是一个自动编号)。我的 INSERT 部分工作得很好,我已经添加了“SELECT SCOPE_IDENTITY();”到最后,但现在我需要检索返回的号码。

目前,所有这些都是通过 SqlDataSource 完成的(将“INSERT”语句放在一起并由代码隐藏文件中的某些 C# 触发,它从页面上的表单中获取数据)。

有没有一种快速获取该数字并将其放入变量的方法?

最佳答案

SQLDataSource 使用 ExecuteNonQuery在内部,这意味着您无法直接检索该值。解决方法是将输出参数传递给 SqlataSource 的插入参数列表,然后在该变量中设置 SCOPE_IDENTITY 返回的值。可以从 Inserted 中检索变量的值事件。

也就是说,

  1. 以声明方式将名为 Identity 的输出参数添加到您的 SqlDatasource 的插入参数
  2. 替换“SELECT SCOPE_IDENTITY();”在插入语句的末尾加上“SET @Identity = SCOPE_IDENTITY();”
  3. 现在可以在“已插入”事件中检索@Identity 参数的值,如下所示:

    protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e) {

    //Read the value of the @Identity OUTPUT parameter
    int lastID = e.Command.Parameters["@Identity"].Value;
    ...  
    

    }

关于c# - 将 scope_identity() 与 ASP.NET 控件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2087947/

相关文章:

c# - 为什么 Environment.SpecialFolder.Desktop 是空的

c# - 添加类 ="col-lg-*"时我的按钮不起作用

c# - 使用 updatepanel 初始工作正常,但一段时间后不起作用

mysql - 如何使用 MySql 查询显示所有非空和所有非空记录,而不提及 where 子句中的所有列名?

c# - MQQueue 中的 PutReplyMessage 和 PutReportMessage 的用途是什么?

c# - 使用VS 2005设计抽象形式

c# - 更新大表(很多列)。 C# 网络

c# - 在 C# 中验证带括号的 boolean 表达式

mysql LEFT JOIN 主表和两个附加表,每个表都有最大值

MySQL:如何更新所有现有条目的自动增量?