【问题标题】:Using scope_identity() with ASP.NET controls将 scope_identity() 与 ASP.NET 控件一起使用
【发布时间】:2010-01-18 17:34:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net sql database


    【解决方案1】:

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

    也就是说,

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

      受保护的虚空 SqlDataSource1_Inserted(对象发送者, SqlDataSourceStatusEventArgs e) {

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

      }

    【讨论】:

      【解决方案2】:

      我相信这段代码可能会有所帮助:

       protected void SqlDataSource1_Inserted(object sender, SqlDataSourceStatusEventArgs e)
          {
              //Read the value of the @Identity OUTPUT parameter
              string sID = e.Command.Parameters["@Identity"].Value.ToString();
      
              //Display new ID
              Label1.Text = sID;
          }
      

      那是来自this blog post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        相关资源
        最近更新 更多