2010-01-18 40 views
1

我已經構建了一個表單,用於在數據庫中向表中輸入一些數據,現在我想要插入該數據,並獲取該數據的ID(這是一個自動編號)剛剛添加的記錄。我已經使INSERT部分工作得很好,並且我已經添加了「SELECT SCOPE_IDENTITY();」到最後,但現在我需要檢索返回的號碼。在ASP.NET控件中使用scope_identity()

目前,所有這些工作都是通過SqlDataSource(將INSERT語句放在一起並由代碼隱藏文件中的某些C#觸發,它從頁面上的表單獲取數據)完成的。

有沒有一個快速的方法來抓住這個數字,並把它放在一個變量?

回答

2

的SqlDataSource使用ExecuteNonQuery內部,這意味着你無法直接檢索該值。解決方法是將輸出參數傳遞到SqlataSource的插入參數列表,然後設置SCOPE_IDENTITY在該變量中返回的值。可以從Inserted事件中檢索變量的值。

也就是說,

  1. 添加所謂的身份到您的SqlDataSource的插入參數輸出參數聲明
  2. 替換 「SELECT SCOPE_IDENTITY();」在「SET @Identity = SCOPE_IDENTITY();」的插入語句末尾
  3. 現在@Identity參數的值可以在 「插入的」 事件如下獲得:

    保護無效 SqlDataSource1_Inserted(對象發件人, SqlDataSourceStatusEventArgs E){

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

    }

+0

謝謝,那似乎已經工作了! – Chris 2010-01-18 18:14:56

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