人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

為 ADO 程序員設計的 ADO.NET (1)

為 ADO 程序員設計的 ADO.NET (1)

更新時間:2022-07-08 文章作者:未知 信息來源:網絡 閱讀次數:

為 ADO 程序員設計的 ADO.NET

摘要:本文討論如何以 ADO.NET 方式實現基本數據庫操作,以及何時使用 ADO.NET 代替 ADO。

目錄


.NET 中的數據訪問
讀取數據
DataSet、DataTable 和 Recordset
轉換現有代碼
更新數據
XML 擴展支持
總結
自若干年前推出開放式數據庫連接 (ODBC) 應用程序編程接口 (API) 以來,出現了各種各樣的數據庫訪問技術,而 ADO.NET 是其中最新的一種。在這過程中,發生了許多有趣的事。例如,COM 闖入數據庫領域,開始培植 OLE DB 的殖民進程。然后,大致相當于 OLE DB 自動化版本的 ActiveX® Data Objects (ADO) 被選來統治 Windows® 數據庫開發者的 Visual Basic® 和 ASP 社區。
通過 .NET,Microsoft 正在提供通用框架(即 Framework Class Library),其中將包括所有現有的 Windows API 甚至更多的內容。特別值得一提的是,它包括大量常用的庫,而這些庫現在需要通過各個 COM 對象分別獲得。在這些庫中,您會發現 XML 和 ADO 對象模型,它們被集成到了叫做 ADO.NET 的類子樹中。
ADO.NET 事實上成為構建數據感知 .NET 應用程序的基礎。和 ADO 不同的是,ADO.NET 遵循更通用的原則,不那么專門面向數據庫。ADO.NET 集合了所有允許數據處理的類。這些類表示具有典型數據庫功能(如索引、排序和視圖)的數據容器對象。盡管 ADO.NET 是 .NET 數據庫應用程序的權威解決方案,但從總體設計上來看,它不象 ADO 模型那樣以數據庫為中心,這是 ADO.NET 的一大特點。
ADO.NET 與 ADO 有很大差異。ADO.NET 是新的數據訪問編程模型,需要開發人員的全面理解、投入和新思維。然而,一旦開始掌握 ADO.NET,您將意識到:原有的 ADO 技巧非常有助于您以不同、卻更巧妙和可靠的方式來創建有效的應用程序和解決各種老問題。
在這篇文章的其余部分,我將集中介紹如何以 ADO.NET 方式實現基本的數據庫操作。我想說明,在什么時候 ADO.NET 是比 ADO 更好的選擇,而您最好在什么時候應放棄 ADO。ADO.NET 并不是將 ADO 改良以符合 .NET 基礎結構而形成的。只要您看一下 ADO.NET 的語法、代碼設計和移植,就會明白這一點。

.NET 中的數據訪問


在 ADO.NET 中訪問數據源的方式由托管提供程序確定。從功能上講,托管提供程序與 OLE DB 的提供程序非常相似,但有兩個重要的不同之處。首先,管理提供程序在 .NET 環境中工作,通過 DataReader 和 DataTable 等 .NET 類檢索和公開數據。其次,因為它們的體系結構針對 .NET 進行了優化,所以比較簡單。
目前 ADO.NET 提供了兩種托管提供程序:一種用于 SQL Server™ 7.0 或更高版本,另一種用于其他所有您可能已經安裝的 OLE DB 提供程序。在這兩種情況下您分別使用不同的類,但遵循相似的命名規則。除前綴外,名稱都是相同的。前一種情況前綴為 SQL,后一種情況則是 ADO。
您應該使用 SQL 類訪問 SQL Server 表,因為它們直接進入數據庫服務器的內部 API,跳過了由 OLE DB 提供程序表示的中間層。ADO 類是 OLE DB 提供程序上的 .NET 接口,它們使用 COM Interop 橋進行工作。
ADO.NET 對象的初學者可參閱 Omri Gazitt 的文章介紹 ADO+:用于 Microsoft .NET 框架的數據訪問服務(英文)和我的 ADO+ 推動數據種類的演變(英文)一文。前者技術性較強,針對 ADO.NET 程序模型提供了高水平的評注性概述。后者主要介紹 ADO.NET 的目標和它與 XML、腳本以及其他技術之間的聯系。

讀取數據


需要從數據源中讀取數據的 ADO.NET 應用程序首先要創建連接對象。根據目標提供程序的不同,該連接對象可以是 SQLConnectionADOConnection。請記住,您可以使用 ADO.NET 類來連接到 SQL Server 數據庫,但我們不建議這樣做。其唯一的缺點是,您的代碼要通過不必要的額外代碼層。它先將 ADO 的托管提供程序調入,然后托管提供程序再調用 SQL Server OLE DB 提供程序。而 SQL Server 托管提供程序和 OLE DB 提供程序一樣直接操作數據。
ADO 和 ADO.NET 連接對象之間的顯著差異是:ADO.NET 連接不支持 CursorLocation 屬性。請注意,這并不是一個文檔錯誤,而是一個有爭議的設計問題。為了突出以數據為中心的原則,ADO.NET 沒有游標的顯式實現。
在 ADO 中,您習慣了用游標從數據庫或其他任何 OLE DB 兼容的數據源中抽取記錄。您可以選擇客戶端或服務器游標,每種游標都有幾個預先設定的游標類型。ADO.NET 則設計為從數據源中抽取數據,并提供新的編程接口來讀取和分析數據。
在 ADO 中,您通過指定連接和命令文本來創建 Recordset 對象。對于游標的位置和類型,Recordset 有一定策略。您可以按下列方式之一讀取數據:
  • 在內存中創建選定記錄的靜態副本,然后在從數據源斷開連接時根據需要處理這些記錄。ADO 稱之為靜態游標。

  • 通過快速、僅向前的只讀游標來滾動數據,這種游標工作在記錄的靜態快照中。ADO 稱之為只讀游標。

  • 通過服務器端的兩種游標來訪問數據,這些游標需要保持良好的連接,但您可以在各個不同層次上隨時檢測其他已連接的用戶的更改。ADO 稱它們為鍵集和動態游標。





前兩種方式都在斷開連接的記錄集內工作,并從客戶端緩存讀取信息,這是它們的相似之處。另外,在面向 Web 的環境中和對于新的 n 層系統,這兩種方式被證明是使用頻率最高的。
在 ADO 中,以上所有這些方式與不同類型的游標相對應。您將在本文后面發現,雖然 ADO.NET 有很大不同,但它能實現您用 ADO 可實現的任何功能。只不過您的代碼將從實際數據源及其物理存儲媒介和格式中抽取數據。
ADO.NET 提供兩個對象來處理從數據源中抽取的數據。它們是 DataSetDataReader 對象。前者是記錄在內存中的緩存,您可以從任何方向隨意訪問和修改。后者是高度優化的對象,專為以僅向前方式滾動只讀記錄而設計。請注意 DataSet 看起來象靜態游標,但實際上,在 .NET 中與 ADO 只讀游標相對應的是 DataReader 對象。
在 ADO.NET 中,不支持服務器端游標。然而,這不意味著您不能使用游標。您需要做的是在 .NET 中導入 ADO 類型庫。在項目窗口的 References 節點上單擊右鍵就行了。導入之后,您便可以開始在應用程序中使用本地 ADO 對象了。
盡管我承認下決心轉向 .NET 是一件很難的事情,但我個人還是建議您考慮用 .NET 重寫現有應用程序。可以把完全導入 ADO 作為邁向 .NET 的第一步,這無須投入太多的時間和資源。然而,請記住這只是漫漫長路上的第一步。這絕不是您邁向 .NET 的唯一一步。.NET 具有超值價值的的真正原因在于統一和一致的編程接口以及對本地類的廣泛使用。您可以導入 COM 類型庫,但導入 COM 類型庫只能作為臨時解決方案或者中間步驟,我們并不鼓勵這樣做。
使用 ADO.NET 時,應當充分考慮到它統一了數據容器類編程接口這一事實。無論您打算編寫何種應用程序,Windows 窗體、Web 窗體還是 Web 服務,都可以通過同一組類來處理數據。不管在后端的數據源是 SQL Server 數據庫、OLE DB、XML 文件還是一個數組,您都可以通過相同的方法和屬性來滾動和處理它們的內容。

/article/UploadPic/2006719105118776.gif


圖 1:Solution Explorer 菜單
如果您堅持在 .NET 中使用 ADO,請準備面對一些副作用。例如,您需要額外的代碼才能夠從數據綁定控件中使用記錄集。

DataSet、DataTable 和 Recordset


在 ADO.NET 中,沒有與 Recordset 對象直接對應的對象。最接近的是 DataTable 對象。盡管這兩個對象的功能幾乎一樣,但它們在各自的框架中起不同的作用。
Recordset 是一個大型對象,具有許多 ADO 功能,但還是有所欠缺。Recordset 在很多方面性能優良,例如可創建性、斷開連接時仍能工作、功能豐富等等。但是,在某些方面仍然有待提高。例如,由于 Recordset 固有的 COM 特性,通過網絡進行序列化的工作將非常繁重。又如它是二進制對象,所以在不同的平臺上運行的模塊很難共享它,而且它不能穿過防火墻。另外,Recordset 表示多個記錄的單個表。如果該表是由一個或多個 JOIN 產生的,更新原始數據源可能會很困難。如果您要使斷開連接的記錄集和原始數據源保持協調,數據源必須能夠識別 SQL。然而,您的記錄集很可能是通過非 SQL 提供程序創建的。
在 ADO.NET 中,ADO Recordset 的所有功能被拆分成幾個較簡單的對象,DataReader 就是其中之一。DataReader 模擬快速、僅向前的只讀游標的操作。
DataTable 是一個表示數據源的簡單對象。您可以手動構造 DataTable,也可以通過 DataSet 命令自動填充它。DataTable 不區分它所包含的數據的來源。該對象允許您在內存中處理數據,以及執行瀏覽、排序、編輯、應用篩選器、創建視圖等操作。
ADO 中沒有與 DataSet 相對應的對象。DataSet 對象是一個容器類,是實現 ADO.NET 數據抽取的關鍵對象。DataSet 將一個或多個 DataTable 對象分組。DataTable 通過象行和列這樣的通用集合公開它的內容。當您嘗試從數據表中讀取數據時,您可能會經過兩個不同的對象層:DataTableMappingDataView
DataTableMapping 對象描述了數據源中的數據列和 DataTable 對象之間的映射關系。當填充 DataSet 時,DataSetCommand 對象要使用這個類。它維護數據集中的抽象列和數據源中的物理列之間的鏈接。
表的視圖通過 DataView 對象實現。它表示 DataTable 的自定義視圖,可以綁定到特定控件(如 Windows 窗體和 Web 窗體中的數據網格)中。該對象相當于 SQL CREATE VIEW 語句在內存中的實現。
DataSet 中的所有表都可以通過一個公用域放入關系中。這個關系由 DataRelation 對象管理。這看起來很象 ADO 的數據形成,但有一點重要區別。您不需要使用數據形成語言,您最終會擁有一個非常靈活的結構體系。ADO.NET 導航模型使您可以輕而易舉地從某一張表內的主行移入它的所有子行。
DataRelation 對象相當于 JOIN 語句在內存中的實現,可用于建立數據類型相同的列的父/子關系。一旦建立了關系,就不允許出現任何會破壞這種關系的更改,如果出現就會導致運行時異常。視圖和關系是實現主表/明細表架構的兩種方式。要記住,視圖只是放在記錄上的掩碼,而關系是設置在兩個表的一個或多個列之間的動態鏈接。如果使用關系,您不能更改順序或設置條件。
如果您的代碼需要一對一外鍵關系,并且不更改數據,那么您最好不要使用無格式的 JOIN 命令。如果您需要額外的篩選功能,就應該使用 ADO.NET 自定義視圖。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 大宁县| 昌乐县| 丰城市| 周宁县| 阿克| 承德市| 芦山县| 贞丰县| 丰城市| 万山特区| 徐水县| 钟祥市| 海晏县| 平湖市| 阳信县| 南投县| 长泰县| 呈贡县| 台南县| 花莲市| 临猗县| 平原县| 东宁县| 邵东县| 湘乡市| 台前县| 贵德县| 福泉市| 文安县| 武强县| 元江| 巫溪县| 南部县| 金堂县| 江阴市| 大同市| 五华县| 福州市| 新平| 诸暨市| 措勤县|