為你解析ADO.NET應用程序
在網上收集了很多有關ADO.NET的信息,整理了一些,希望對大家有所幫助。ADO.NET應用程序和基礎數據源之間的交互基于一個具有雙向信道的雙體系結構。您可以使用各個特定于提供程序的命令或批處理更新過程來訪問數據源,以讀取和寫入行。在這兩種情況下,數據訪問都會產生完全雙向綁定,并涉及各種不同的對象和方法。您可以使用如 SqlCommand 和 OleDbCommand 等命令類來執行單個命令。可使用數據適配器對象來下載斷開連接的數據,提交更新的行集。雖然 “數據集” 是數據適配器用于返回和提交記錄塊的容器對象,但各個命令通過數據讀取器對象返回數據。
更新是通過各個命令、存儲過程完成的,通常,托管提供程序理解的任何命令文本一般都被稱為更新。更新命令總是執行嵌入在語句正文中的新數據。更新命令總是需要一個打開的連接,可能還需要一個正在進行的事務處理或一個新的事務處理。批處理更新則是一個略有不同的方法分支。從最高的抽象級別來看,您并不發出命令,無論它可能有多么復雜。取而代之的是,您提交在客戶端修改的當前行的快照,并等待數據源批準。批處理更新背后的關鍵概念是數據斷開連接的概念。您下載行表,通常為數據集,根據需要在客戶端對它進行修改,然后將這些行的新映像提交到數據庫服務器。您所作的是提交更改,而不是執行一個對數據源創建更改的命令。這就是更新(我在 July column 一文中討論過這個問題)和批處理更新之間的本質區別。
下圖說明了ADO.NET 應用程序的雙更新體系結構。
圖 1. ADO.NET應用程序和數據源之間的兩個雙向交互
在進一步詳細討論 ADO.NET 批處理更新之前,我需要闡明常常會導致某種誤解的批處理更新模型的一個方面。雖然更新和批處理更新在 ADO.NET 內的實際實現方面有著本質的區別,但它們遵循的是同一個更新模型。更新和批處理更新都是通過直接的并且特定于提供程序的語句來完成的。當然,由于批處理更新通常涉及到更多的行,所以這些語句會被組合為一個批處理調用。批處理更新會對目標數據集的行進行從頭到尾的循環,只要發現更新的行,就會發出適當的更新命令(INSERT、DELETE 或 UPDATE)。對更新的行進行通信時,將運行一個預定義的直接 SQL 命令。從本質上來說,這就是批處理更新。
這個過程是理所當然的。實際上,如果批處理更新使用完全不同的更新模型,就需要來自數據源的特殊支持。(這正是向 SQL Server 2000 提交 XML updategram 時發生的情況。)批處理更新只是一個用來簡化多個行更新提交的客戶端提供的軟件機制。在任何情況下,每個新行提交總是通過數據源直接命令的正常通道完成的。
到目前為止,本文只提及了 SQL 命令,但這些提及的內容都明確表明了 ADO 批處理更新實現和 ADO.NET 批處理更新實現之間的一個重要區別。在 ADO 中,批處理更新只可能發生在基于 SQL 的數據源上。而在 ADO.NET 中,批處理更新則可能發生在任何種類的托管提供程序上,其中包括那些不應該通過 SQL 查詢語言公開其數據的托管提供程序。現在,我們可以開始討論 ADO.NET 批處理更新編程的關鍵內容了。
【編輯推薦】