新聞中心
ADO.NET還是比較常用的,于是我研究了一下ADO.NET,在這里拿出來和大家分享一下,希望對大家有用。如果在運行時動態(tài)指定 SelectCommand 屬性(例如,通過接受用戶提供的文本命令的查詢工具),那么您可能無法在設計時指定適當?shù)?InsertCommand、UpdateCommand 或 DeleteCommand。 如果您的 DataTable 映射到單個數(shù)據(jù)庫表或者是從單個數(shù)據(jù)庫表中生成的,那么您可以利用 ADO.NET DbCommandBuilder對象來自動生成 DbDataAdapter 的 DeleteCommand、InsertCommand 和 UpdateCommand。

渝水ssl適用于網站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
為了能夠自動生成命令,必須設置 SelectCommand 屬性,這是最低要求。 由 SelectCommand 屬性檢索的表架構確定自動生成的 INSERT、UPDATE 和 DELETE 語句的語法。
#T#為了返回構造 INSERT、UPDATE 和 DELETE SQL 命令所需的元數(shù)據(jù),DbCommandBuilder 必須執(zhí)行 SelectCommand。 因此,必須額外經歷一次到數(shù)據(jù)源的過程,這可能會降低性能。若要實現(xiàn)最佳性能,請顯式指定命令而不是使用 ADO.NET DbCommandBuilder。SelectCommand 還必須至少返回一個主鍵或唯一列。 如果不存在任何主鍵和唯一列,則會生成 InvalidOperation 異常,并且不會生成命令。當與 DataAdapter 關聯(lián)時,ADO.NET DbCommandBuilder會自動生成 DataAdapter 的 InsertCommand、UpdateCommand 和 DeleteCommand 屬性(如果它們?yōu)榭找茫?如果某個屬性已存在 Command,則使用現(xiàn)有 Command。
通過聯(lián)接兩個或更多個表來創(chuàng)建的數(shù)據(jù)庫視圖不會被視為單個數(shù)據(jù)庫表。 在這種情況下,您無法使用 DbCommandBuilder 來自動生成命令;必須顯式指定命令。 有關顯式設置命令以將對 DataSet 的更新解析回數(shù)據(jù)源的信息,請參見使用 DataAdapter 更新數(shù)據(jù)源 (ADO.NET)。
您可能需要將輸出參數(shù)映射回 DataSet 的更新行。 一項常見的任務是從數(shù)據(jù)源中檢索自動生成的標識字段或時間戳的值。 默認情況下,DbCommandBuilder 不會將輸出參數(shù)映射到更新行中的列。 在這種情況下,必須顯式指定命令。 有關將自動生成的標識字段映射回插入行的列的示例,請參見檢索標識或 Autonumber 值 (ADO.NET)。
更新和刪除的開放式并發(fā)模型
為 UPDATE 和 DELETE 語句自動生成命令的邏輯基于“開放式并發(fā)” -- 即未鎖定記錄的編輯功能,其他用戶或進程可以隨時修改。 由于在從 SELECT 語句中返回某記錄之后但在發(fā)出 UPDATE 或 DELETE 語句之前,該記錄可能已被修改,所以自動生成的 UPDATE 或 DELETE 語句包含一個 WHERE 子句,指定只有在行包含所有原始值并且尚未從數(shù)據(jù)源中刪除時,才會更新該行。 這樣做的目的是為了避免覆蓋新數(shù)據(jù)。當自動生成的 UPDATE 命令試圖更新已刪除或不包含 DataSet 中原始值的行時,該命令不會影響任何記錄,并且會引發(fā) DBConcurrencyException。
如果要使 UPDATE 或 DELETE 在不考慮原始值的情況下完成,必須為 DataAdapter 顯式設置 UpdateCommand,而不依賴自動命令生成。
新聞標題:巧用ADO.NETDbCommandBuilder生成命令
本文來源:http://fisionsoft.com.cn/article/cccoiie.html


咨詢
建站咨詢
