在資料新增後,取得剛剛新增的 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