I. 前言
很久很久以前,坎尼常遇到一個問題「新增完一筆資料之後,要回傳該資料的ID」
如果 ID 是自己取 Max + 1 就還能控制
但要是遇到是用 sequence 方式建立的流水號
往往還要拆成兩段語法,建立完資料之後再取出
其實大可不必那麼麻煩,可以將 SQL Statement 串接在一起
(記得用 ; 隔開不同的指令)
再用 SqlCommand 或 SqlDataAdapter 執行即可
II. 實戰
下圖綠色框部分,用 Sql Server 提供的 Temp Tables 語法分別建立了兩個臨時資料表,並各加入兩筆資料
再用 SELECT 語法將兩個資料表 JOIN 的結果回傳
既然 Create 和 Insert 語法都在 SelectCommand 裡
參數當然也是要加進 SelectCommand 裡 (見上圖藍色框)
實際執行情況:確實建立了 Table 並取得 JOIN 成功的資料
另外坎尼又做了小小的測驗,驗證一下臨時資料表有沒有被砍掉
事實證明,在上一次 .Fill 結束之後,暫存資料表是會自動清掉
而 Temp Table 的定義是:只存在該使用者連線時
這表示 DataAdapter 在 .Fill 之後就會自動把連線關閉
下一次的 .Fill 其實是另外再重新開啟另一個連線
III. 小結
坎尼以前常看到有人用 DataAdapter卻在執行前後加上 Connection.Open() 及 Connection.Close()
其實這些動作都是不必要的
DataAdapter 在執行時,都會檢查目前和 DB 的連線
執行結束後即會自動關閉與 DB 的連線
希望這些觀念對讀者們有幫助 :)
2 則留言:
謝謝阿尼 :)
話說取號是個挺 tricky 的東西,處理不好的話可能會造成 ID 重複 ... 用流水號感覺比較保險一點 :p
張貼留言