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