typed DataSet 真的難用 …..

這幾天做一個小案子但資料庫是用 Access 的

由於 Access 不支援一次寫兩段 SQL , 例如 INSERT …. ; SELECT ….. 用分號去區隔兩段 SQL 指令

所以若想要用  VS 2008 的內建 typed DataSet 工具做一個指令例如 int InsertProduct() 新增資料後並且取回 Primary Key (Identity)的值是不可能的 , 必須自己手動為 typed DataSet寫指令

且我一直以為用 typed DataSet 的 NewRow() 指令去新增一筆資料 , 它會自動幫我更新最後的 Primary Key 值 , 結果也沒有

好 , 這還沒關係 , 我想說 , 那我用 VS 的設計工具新增一個叫 int GetIdentity() 指令在 typed DataSet 來專門取得最後一筆新增的 ID , 內容則是 SELECT @@IDENTITY , 結果這樣子也沒用 , 我調出該 typed DataSet 所產生的物件原始碼來看 ,  原來由 VS 所自動產生的 Method 在每次一呼叫完就會 Close Connection !!! 難怪我百思不解每次呼叫 GetIdentity 總是回傳 0 …

搞到最後只好自己為 typed DataSet 手動增加 Method 來做了 , 只有手動寫才有辦法一次執行兩次的 Command

但這讓我想到 Zend FrameWork 的 Zend_Db_Table 如果也用同樣方法去新增資料列 , Zend_Db_Table 卻能自動更新 Primay Key …. 為何微軟就是沒把這功能實現出來呢 ….

也許一開始就不該使用 typed DataSet 來設計吧 , 用 System.Data.Common 下的資料庫元件也許比較好設計 , 但是打指令好累 , 光丟參數給 Command 就要寫一堆 , 會想用 typed DataSet 除了強型的 DataRow 可以避免程式出錯的機率 , 另外一點就是不想看到有任何 OleClient 哈 , 以後若要改成 MSSQL 或 MySQL 就比較好改 , 唉 … 真不知道為何 ASP.NET 在台灣為何這麼多人在用 …. 還是 PHP 好用多哩

2 則評論在 typed DataSet 真的難用 …...

  1. 在xsd設計工具中,針對你定義好的強型別資料表,設定它的進階選項,打勾”重新整理資料表”,這樣你新增的資料列在透過TableAdapter儲存後,就會自動更新Identity了。

發佈留言