河南省科學(xué)技術(shù)信息研究院 高 俊
ADO.Net數(shù)據(jù)訪問技術(shù)分析
河南省科學(xué)技術(shù)信息研究院 高 俊
1.ODBC。最初,各個(gè)數(shù)據(jù)庫軟件開發(fā)商為自己的數(shù)據(jù)庫設(shè)計(jì)不同的數(shù)據(jù)庫管理系統(tǒng)(DBMS),不同類型數(shù)據(jù)庫之間的數(shù)據(jù)交換是一件非常麻煩的事情。為了解決這一問題,微軟提出了ODBC,即 開 放 式 數(shù) 據(jù) 庫 連 接 技 術(shù)(Open DataBase Connectivity),它試圖建立一種統(tǒng)一的應(yīng)用程序數(shù)據(jù)庫訪問接口,通過它開發(fā)人員無需了解數(shù)據(jù)庫內(nèi)部的結(jié)構(gòu)就可以實(shí)現(xiàn)對數(shù)據(jù)庫的訪問。ODBC開創(chuàng)了數(shù)據(jù)訪問技術(shù)的一個(gè)里程碑,各數(shù)據(jù)庫廠商紛紛推出為自己數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)的ODBC驅(qū)動(dòng)程序。
2.OLE DB。隨著計(jì)算機(jī)技術(shù)的迅猛發(fā)展,ODBC在面對新的數(shù)據(jù)驅(qū)動(dòng)程序的設(shè)計(jì)和構(gòu)造方法時(shí)遇到了不少困難,OLE DB(Object Linkingand Embedding DataBase,對象連接和嵌入數(shù)據(jù)庫)技術(shù)便應(yīng)運(yùn)而生了。從某種程度上來說,OLE DB是ODBC發(fā)展的一個(gè)產(chǎn)物。OLE DB在設(shè)計(jì)上采用了多層模型,對數(shù)據(jù)的物理結(jié)構(gòu)依賴更少,理論上說,任何一種能為OLE DB提供者所識別的語言都可以使用且不必嚴(yán)格基于SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)的標(biāo)準(zhǔn)。
3.ADO。ADO對OLE DB做了進(jìn)一步的封裝。從整體上來看,ADO模型以數(shù)據(jù)庫為中心,具有更多的層次模型和更豐富的編程接口,它大致相當(dāng)于OLE DB的自動(dòng)化版本,雖然在效率上稍有遜色,但其追求的是簡單、友好的應(yīng)用。通過ADO,不僅可以直接訪問基于SQL Server的數(shù)據(jù)庫,還可以訪問所有支持ODBC的數(shù)據(jù)庫。
ADO.NET是ADO最新發(fā)展的產(chǎn)物,具有更廣泛的通用性。ADO.NET技術(shù)的出現(xiàn),開辟了數(shù)據(jù)訪問技術(shù)的新紀(jì)元。ADO. NET是VS.NET的重要組成部分,是新一代的數(shù)據(jù)存取技術(shù)。在ADO.NET中,通過Managed Provider所提供的應(yīng)用程序編程接口(API),便可輕松地訪問各種數(shù)據(jù)源的數(shù)據(jù),包括OLE DB和ODBC所支持的數(shù)據(jù)庫。圖1描述了有關(guān)數(shù)據(jù)訪問與鏈接標(biāo)準(zhǔn)的各種數(shù)據(jù)模型的邏輯關(guān)系。
1.關(guān)于Managed Provider和DataSet。
(1)Managed Provider。Managed Provider是ADO.NET中的一個(gè)核心內(nèi)容,它描述鏈接的類型并協(xié)調(diào)應(yīng)用程序和DataSet對象與數(shù)據(jù)庫之間的通信。正是因?yàn)镸anaged Provider提供了DataSet和數(shù)據(jù)中心(就是數(shù)據(jù)庫)之間的聯(lián)系,包含了對數(shù)據(jù)中心存取的一系列應(yīng)用程序編程接口(API),才使得編寫應(yīng)用程序的程序員在實(shí)現(xiàn)訪問各種數(shù)據(jù)源的數(shù)據(jù)時(shí),只需通過Managed Provider所提供的應(yīng)用程序編程接口(API),而無需了解其內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。
(2)DataSet。DataSet是ADO.NET的中心概念,所有ADO. NET對象的基本原理和根源都是DataSet對象模型。在DataSet的內(nèi)部是用XML來描述的,借助XML可以描述具有復(fù)雜關(guān)系的數(shù)據(jù),比如最常見的父子關(guān)系等。DataSet具有的一個(gè)明顯的技術(shù)優(yōu)勢,就是能夠容納復(fù)雜關(guān)系的數(shù)據(jù)。DataSet不依賴于數(shù)據(jù)源(如數(shù)據(jù)庫)而獨(dú)立存在于內(nèi)存中,是一個(gè)離散的數(shù)據(jù)對象,可以把DataSet想象成內(nèi)存中的數(shù)據(jù)庫,也就是把它理解為一個(gè)簡單、獨(dú)立和存在于內(nèi)存中的數(shù)據(jù)庫視圖。一個(gè)DataSet可以包含任意數(shù)目的表,每個(gè)表一般對應(yīng)于一個(gè)數(shù)據(jù)庫表或視圖。
2.通過ADO.NET訪問數(shù)據(jù)庫。
(1)導(dǎo)入名稱空間。ADO.NET提供2種托管提供程序用于訪問不同的數(shù)據(jù)源,它們分別擁有不同的名稱空間定義。如果想要訪問數(shù)據(jù)庫,就需要將這些名稱空間導(dǎo)入到相應(yīng)的應(yīng)用程序中。
(2)連接數(shù)據(jù)庫。無論使用何種方式對數(shù)據(jù)庫進(jìn)行數(shù)據(jù)操作,很重要的一步就是要建立與數(shù)據(jù)庫的鏈接。建立一個(gè)鏈接,則需要?jiǎng)?chuàng)建一個(gè)SQLConnection類對象。SQLConnection類對象包含在名稱空間System.Data.SqlClient中。
(3)執(zhí)行有關(guān)SQL查詢語句操作。創(chuàng)建好鏈接后,需要一種機(jī)制實(shí)現(xiàn)對數(shù)據(jù)庫進(jìn)行操作,實(shí)際上就是對數(shù)據(jù)庫執(zhí)行相關(guān)的SQL語句。為完成這一任務(wù),需要?jiǎng)?chuàng)建一個(gè)SQLCommand類對象。SQLCommand類對象包含在名稱空間System.Data.SqlClient中。
本文,筆者簡單分析ADO.NET的一些概念和應(yīng)用,數(shù)據(jù)庫訪問是程序中應(yīng)用最普遍的部分。在成功鏈接數(shù)據(jù)庫之后,就可以直接編寫代碼了,也可進(jìn)行數(shù)據(jù)處理、讀取、插入、更新數(shù)據(jù)及刪除數(shù)據(jù)等操作。