在資料新增後,馬上取得新增的 PK 值(自動新增的 PK)

在資料新增後,取得剛剛新增的 PK 值(自動新增的 PK)

在資料新增後,馬上取得新增的 PK 值(自動新增的 PK)
 

A. 先拉出 DetailsView, SqlDataSource, Label1。另外為了方便,直接把 DetailsView 的 DefaultMode 屬性設定成 Insert


B. 設定 SqlDataSource 所連結的 Table 要設定可以新增修改


C. 接下來在 SqlDataSource1 的屬性中,找 InsertQuery,然後點詳細內容圖示(...)。


D. 在Insert 命令編輯中,輸入 ;SELECT @PK_New = SCOPE_IDENTITY(),其中 PK_New 可以自行命名。
     接著按【重新整理參數】,便會在參數列表中看到 PK_New 這個參數。
     ps. 其中 SCOPE_IDENTITY() 也可以改成  @@IDENTITY,Select 句子變成 ;SELECT @PK_New = @@IDENTITY 
     最後按右方的【顯示進階屬性】


E. 將 Direction 屬性值改為 Output;Type 改為 Int32 (根據資料表中 PK 欄位型別設定)
 《注意》若之後有變動過SqlDataSource1,最好再過來這邊確認一下。我曾經多次遇過,在修改過後, VS2005 很自動的又將這步驟的設定值回歸到原本設定,造成程式錯誤。


F. 移到程式碼編輯,選擇 SqlDataSource1 的 Inserted 事件。
    在程式碼的地方,利用 e.Command.Parameters("@PK_New").Value 來取得剛剛新增的 PK 值


G. 完成後執行畫面。在輸入後按下插入,原本 Lable1 的值會出現剛剛新增的 PK 值。

 

註記:非原創,很久以前在某文章學到的,這篇中我整理過並抓圖。忘了出處在哪,請見諒。

完整範例程式下載:DemoGetNewPK.rar

 

 2009/11/21 補充:

IDENT_CURRENT、SCOPE_IDENTITY、@@IDENTITY 差異對照表

http://www.dotblogs.com.tw/hunterpo/archive/2009/09/04/10421.aspx

 作者比較建議大家使用 SCOPE_IDENTITY() 來取值

 

2010/01/28

http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/3802e601-f3c3-45af-b443-555f1977876f