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

时间:2010-01-18 17:34:31

标签: c# asp.net sql database

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

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

是否有快速获取该数字并将其放入变量的方法?

2 个答案:

答案 0 :(得分:2)

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

即,

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

      

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

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

    }

答案 1 :(得分:1)

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

 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