摘 要:數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)是應(yīng)用軟件系統(tǒng)開(kāi)發(fā)中非常重要的技術(shù)之一。以往應(yīng)用軟件對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)實(shí)現(xiàn)復(fù)雜,訪問(wèn)效率低。文中介紹了一種應(yīng)用簡(jiǎn)單且數(shù)據(jù)庫(kù)訪問(wèn)效率較好的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)ADO.NET技術(shù)。詳細(xì)介紹了ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的對(duì)象模型組成,訪問(wèn)數(shù)據(jù)庫(kù)的原理及一般操作步驟,最后通過(guò)一個(gè)具體的ASP.NET網(wǎng)站開(kāi)發(fā)實(shí)例來(lái)說(shuō)明了其應(yīng)用。應(yīng)用實(shí)例顯示,ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的應(yīng)用簡(jiǎn)化了開(kāi)發(fā)中數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),提高了訪問(wèn)效率,同時(shí)還提高了數(shù)據(jù)訪問(wèn)的安全性。通過(guò)對(duì)此技術(shù)的研究與應(yīng)用,希望能給相關(guān)的軟件開(kāi)發(fā)人員及數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)人員提供借鑒與參考。
關(guān)鍵詞:ADO.NET;數(shù)據(jù)庫(kù)訪問(wèn)技術(shù);對(duì)象模型;數(shù)據(jù)庫(kù)服務(wù)器
中圖分類(lèi)號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)是應(yīng)用軟件系統(tǒng)開(kāi)發(fā)中至關(guān)重要的技術(shù)之一,過(guò)去軟件開(kāi)發(fā)中實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)的方法非常復(fù)雜,訪問(wèn)數(shù)據(jù)庫(kù)的效率較低。隨著社會(huì)信息化的不斷發(fā)展,計(jì)算機(jī)及網(wǎng)絡(luò)技術(shù)的不斷進(jìn)步,數(shù)據(jù)庫(kù)信息化存儲(chǔ)技術(shù)已成為當(dāng)今對(duì)大規(guī)模信息化數(shù)據(jù)組織及管理的重要手段與軟件系統(tǒng)基礎(chǔ),同時(shí)也是信息化網(wǎng)絡(luò)管理系統(tǒng)開(kāi)發(fā)技術(shù)的基礎(chǔ)。由此可見(jiàn),數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)在軟件開(kāi)發(fā)中顯得特別重要,幾乎大部分應(yīng)用系統(tǒng)的開(kāi)發(fā)都離不開(kāi)數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)。下面結(jié)合本人多年來(lái)的軟件開(kāi)發(fā)與設(shè)計(jì)經(jīng)驗(yàn),探討一下ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)[1]在ASP.NET開(kāi)發(fā)中的應(yīng)用。
2 ADO.NET技術(shù)簡(jiǎn)介(ADO.NET technology
introduction)
ADO.NET(ActiveX Data Object.NET)是由微軟公司開(kāi)發(fā)用于方便開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中訪問(wèn)數(shù)據(jù)庫(kù)的一套組件模型,比以前的ADO數(shù)據(jù)訪問(wèn)模型更靈活,更能滿(mǎn)足廣泛的數(shù)據(jù)訪問(wèn)控制要求,同時(shí)也提供了更多的功能。ADO.NET技術(shù)模型不僅為.NET程序員公開(kāi)提供了一組方便訪問(wèn)數(shù)據(jù)庫(kù)的組件,同時(shí)也提供了方便開(kāi)發(fā)人員創(chuàng)建分布式共享數(shù)據(jù)應(yīng)用程序需要使用的一組組件模型。ADO.NET被嵌套在.NET平臺(tái)的Framework中,它提供了對(duì)關(guān)系型數(shù)據(jù)庫(kù)、XML數(shù)據(jù)庫(kù)[2]及應(yīng)用程序數(shù)據(jù)庫(kù)等多種類(lèi)型數(shù)據(jù)庫(kù)的訪問(wèn)技術(shù)。ADO.NET應(yīng)用范圍廣泛,不僅可以應(yīng)用于桌面應(yīng)用程序的開(kāi)發(fā),還可以應(yīng)用于Web應(yīng)用程序[3]的開(kāi)發(fā)及其他應(yīng)用程序的開(kāi)發(fā)。ADO.NET與以往的數(shù)據(jù)訪問(wèn)技術(shù)最大的不同之處在于:它支持應(yīng)用程序與數(shù)據(jù)庫(kù)以完全非連接的數(shù)據(jù)緩存的方式交互,實(shí)現(xiàn)離線操作數(shù)據(jù)。
3 ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)(ADO.NET database
access technology)
3.1 ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)分析
ADO.NET組件模型中包含了有關(guān)數(shù)據(jù)庫(kù)訪問(wèn)、數(shù)據(jù)庫(kù)操作及與數(shù)據(jù)庫(kù)訪問(wèn)操作有關(guān)的一組對(duì)象模型,是.NET Framework的重要組成部分。ADO.NET組件模型以.NET的類(lèi)庫(kù)形式呈現(xiàn)給用戶(hù)使用,主要包括兩個(gè)核心組件:.NET DataProvider(數(shù)據(jù)提供者)和DataSet(數(shù)據(jù)集)對(duì)象。
.NET Data Provider是一組為數(shù)據(jù)處理及快速循序、只讀訪問(wèn)數(shù)據(jù)庫(kù)而設(shè)計(jì)的組件,主要提供方便應(yīng)用程序連接數(shù)據(jù)庫(kù)的功能;提供以SQL語(yǔ)句的形式操作數(shù)據(jù)庫(kù),且能以多種形式把查詢(xún)到的結(jié)果填充到DataSet(數(shù)據(jù)集)中。
DataSet數(shù)據(jù)集對(duì)象是ADO.NET組件模型中支持?jǐn)嚅_(kāi)式和分布式操作數(shù)據(jù)的核心對(duì)象。DataSet對(duì)象是駐留計(jì)算機(jī)內(nèi)存中臨時(shí)存取的數(shù)據(jù)庫(kù)。DataSet的最大特點(diǎn)是提供始終保持與數(shù)據(jù)庫(kù)一致的關(guān)系型編程模型且獨(dú)立于任何數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn)而設(shè)計(jì)。DataSet對(duì)象的主要功能包括:用DataTable和Data Relations對(duì)象來(lái)存放由.NET Data Provider對(duì)象發(fā)生過(guò)來(lái)的數(shù)據(jù)庫(kù)訪問(wèn)執(zhí)行的結(jié)果集,以供應(yīng)用程序訪問(wèn);把應(yīng)用程序?qū)?shù)據(jù)庫(kù)的執(zhí)行操作結(jié)果更新到數(shù)據(jù)源數(shù)據(jù)庫(kù)中。DataSet數(shù)據(jù)集對(duì)象能在與數(shù)據(jù)源斷開(kāi)的情況下管理和儲(chǔ)存數(shù)據(jù),對(duì)于大量訪問(wèn)數(shù)據(jù)庫(kù)的場(chǎng)合來(lái)說(shuō)這一點(diǎn)是非常實(shí)用的,因?yàn)檫@樣不僅可以減輕數(shù)據(jù)庫(kù)服務(wù)器訪問(wèn)的壓力,同時(shí)還起到保護(hù)數(shù)據(jù)庫(kù)服務(wù)器的作用。ADO.NET組件的體系結(jié)構(gòu)如圖1所示。
圖1 ADO.NET體系結(jié)構(gòu)
Fig.1 ADO.NET architecture
3.2 ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)實(shí)現(xiàn)原理
從ADO.NET體系結(jié)構(gòu)圖可以看到,ADO.NET組件對(duì)象模型由Connection、Command、DataReader、DataAdapter和DataSet五個(gè)數(shù)據(jù)庫(kù)連接及操作對(duì)象組成。它們分工協(xié)作,完成對(duì)數(shù)據(jù)源的訪問(wèn)及操作任務(wù)。其中,Connection對(duì)象主要負(fù)責(zé)連接各種類(lèi)型的數(shù)據(jù)源,Command對(duì)象主要用于生成并執(zhí)行應(yīng)用程序所需的SQL語(yǔ)句,DataReader對(duì)象負(fù)責(zé)循序讀取執(zhí)行SQL語(yǔ)句后的數(shù)據(jù)庫(kù)中的數(shù)據(jù),DataAdapter對(duì)象負(fù)責(zé)將執(zhí)行Command對(duì)象的SQL語(yǔ)句得到的數(shù)據(jù)庫(kù)結(jié)果搬運(yùn)到DataSet中,DataSet對(duì)象負(fù)責(zé)存取和更新數(shù)據(jù)源數(shù)據(jù)。
通過(guò)對(duì)ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)原理圖可知,ADO.NET組件模型是連接應(yīng)用程序與數(shù)據(jù)庫(kù)的橋梁,如圖2所示為ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)原理結(jié)構(gòu)示意圖。在.NET應(yīng)用程序開(kāi)發(fā)中,應(yīng)用程序如果要訪問(wèn)數(shù)據(jù)庫(kù)就需要使用ADO.NET組件,然而幾乎所有應(yīng)用程序都離不開(kāi)數(shù)據(jù)庫(kù)的訪問(wèn),可見(jiàn)在.NET應(yīng)用程序開(kāi)發(fā)中,ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)非常重要。
3.3 ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)實(shí)現(xiàn)的一般步驟
使用ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)進(jìn)行軟件系統(tǒng)開(kāi)發(fā)過(guò)程中,盡管ADO.NET組件模型包括的對(duì)象較多,訪問(wèn)數(shù)據(jù)庫(kù)的技術(shù)靈活復(fù)雜,但也不是沒(méi)有規(guī)律可循。在軟件開(kāi)發(fā)中利用ADO.NET訪問(wèn)數(shù)據(jù)庫(kù)操作的一般步驟如下:
第一步:創(chuàng)建ADO.NET數(shù)據(jù)庫(kù)連接對(duì)象(Connection對(duì)象)開(kāi)啟與數(shù)據(jù)源的連接。
第二步:在第一步中建立的數(shù)據(jù)庫(kù)連接對(duì)象基礎(chǔ)上,再創(chuàng)建一個(gè)執(zhí)行數(shù)據(jù)庫(kù)操作的命令對(duì)象(Command對(duì)象)以執(zhí)行指定的操作。
第三步:執(zhí)行數(shù)據(jù)庫(kù)操作命令對(duì)象得到操作結(jié)果,通過(guò)使用DataReader對(duì)象采用與數(shù)據(jù)庫(kù)連接的模式來(lái)取得執(zhí)行的命令的相應(yīng)結(jié)果,或創(chuàng)建并執(zhí)行數(shù)據(jù)適配器對(duì)象(DataAdapter對(duì)象),將執(zhí)行數(shù)據(jù)庫(kù)操作命令對(duì)象得到操作結(jié)果填充到數(shù)據(jù)集對(duì)象中,應(yīng)用程序再?gòu)臄?shù)據(jù)集對(duì)象中獲取相應(yīng)數(shù)據(jù)結(jié)果。
第四步:應(yīng)用程序?qū)?shù)據(jù)處理完畢后,使用Command命令對(duì)象或DataAdapter對(duì)象將處理結(jié)果更新到數(shù)據(jù)源中。
第五步:釋放ADO.NET對(duì)象模型中各種數(shù)據(jù)提供者所使用的對(duì)象資源,斷開(kāi)數(shù)據(jù)庫(kù)連接。
圖2 ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)原理
Fig.2 ADO.NET database access technology principle
4 ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的應(yīng)用(Application
of ADO.NET database access technology)
眾所周知,支持離線訪問(wèn)數(shù)據(jù)庫(kù)是ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的一大優(yōu)勢(shì),這一點(diǎn)對(duì)于Web數(shù)據(jù)庫(kù)的訪問(wèn)最為明顯,因?yàn)樵贏SP.NET網(wǎng)站的頁(yè)面中采用ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)使得頁(yè)面的安全性及執(zhí)行效率都有較大提高。下面結(jié)合某學(xué)院校務(wù)公開(kāi)網(wǎng)站中的新聞添加模塊功能為例來(lái)詳細(xì)闡述ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)在ASP.NET網(wǎng)站開(kāi)發(fā)技術(shù)中的應(yīng)用[4]。新聞添加模塊功能的實(shí)現(xiàn)是在系統(tǒng)后臺(tái)添加單擊添加新聞按鈕響應(yīng)事件時(shí),則向數(shù)據(jù)源里面添加一條新聞信息記錄。后臺(tái)程序語(yǔ)言使用C#,數(shù)據(jù)庫(kù)服務(wù)器使用SQL Server 2008,數(shù)據(jù)庫(kù)名稱(chēng)為SWEB,NEWS為SWEB數(shù)據(jù)庫(kù)存儲(chǔ)記錄表,表中字段包括ID(列標(biāo)志)、XWBT、XWLB、XWLY、XWTM。
在ASP.NET網(wǎng)站的系統(tǒng)文件web.config中配置數(shù)據(jù)庫(kù)連接字符串[5]如下:
在相應(yīng)asp.net網(wǎng)頁(yè)的后臺(tái)創(chuàng)建數(shù)據(jù)庫(kù)連接類(lèi):
public class connection
{
public static SqlConnection getconnection() //創(chuàng)建連接函數(shù)
{
string connectionstringxinwen=WebConfigurationManager.ConnectionStrings[webConnectionString].ConnectionString;
If(string.IsNullOrEmpty(connectionstringxinwen)
throw new Exception(查找連接字符串失敗?。?;
SqlConnection conn=new SqlConnection(connectionstringxinwen)
return conn;
}
}
protected void btnenter_Click(object sender,EventArgse)//添加新聞按鈕函數(shù)定義
{
string XWBT=TxtBox1.Text.Tostring().Trim();
string XWLB=DropDownList.SelectedItem.Text.Tostring();
string XWLY= TxtBox2.Text.Tostring().Trim();
string XWTM=Editor.Text; //使用了網(wǎng)頁(yè)編輯器
SqlConnection conn=connection.getconnection();//創(chuàng)建數(shù)據(jù)庫(kù)連接對(duì)象
conn.open();//打開(kāi)連接的數(shù)據(jù)庫(kù)
SqlCommand cmd=new SqlCommand(〝insert into news-values(@XWBT,@XWTM,@XWLB,@XWLY),conn); //創(chuàng)建數(shù)據(jù)庫(kù)操作命令對(duì)象執(zhí)行插入操作
cmd.Parameters.AddWithValue(@XWBT,XWBT);
cmd.Parameters.AddWithValue(@XWLB,XWLB);
cmd.Parameters.AddWithValue(@XWLY,XWLY);
cmd.Parameters.AddWithValue(@XWTM,XWTM);
cmd.ExecuteNonQuery();//執(zhí)行插入操作命令
Response.Write();
conn.close()// 斷開(kāi)與數(shù)據(jù)庫(kù)的連接
conn.Dispose();//釋放各種數(shù)據(jù)提供者對(duì)象資源
}
5 結(jié)論(Conclusion)
數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)是應(yīng)用程序開(kāi)發(fā)中一項(xiàng)煩瑣且復(fù)雜的操作,尤其在網(wǎng)站開(kāi)發(fā)中更顯重要。ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)的提供,成功實(shí)現(xiàn)了離線狀態(tài)下客戶(hù)端數(shù)據(jù)訪問(wèn)技術(shù),這一點(diǎn)使得軟件開(kāi)發(fā)人員能以更加有效的方式設(shè)計(jì)開(kāi)發(fā)出更高效的數(shù)據(jù)庫(kù)應(yīng)用程序系統(tǒng)。ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)使用靈活,要想在開(kāi)發(fā)過(guò)程中能靈活運(yùn)用,必須多加實(shí)踐多應(yīng)用。
參考文獻(xiàn)(References)
[1] 應(yīng)毅,毛宇光,劉正濤.基于ADO.NET技術(shù)的Web訪問(wèn)數(shù)據(jù)庫(kù) 研究與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2005(04):64-67;101.
[2] 紀(jì)兆輝,胡孔法.基于ADO.NET和XML實(shí)現(xiàn)數(shù)據(jù)交換[J].微計(jì) 算機(jī)信息.2009(18):265-266;230.
[3] 蔣薇,等.基于ADO.NET數(shù)據(jù)訪問(wèn)技術(shù)的研究和應(yīng)用[J].微計(jì) 算機(jī)信息,2010(10):141-143.
[4] 張嵐,高建芳.ADO.NET技術(shù)及其實(shí)踐應(yīng)用[J].內(nèi)蒙古科技與 經(jīng)濟(jì),2012(10):40-42.
[5] 朱子江,胡毅,劉東.基于ADO.NET的數(shù)據(jù)庫(kù)連接池技術(shù)的優(yōu) 化研究[J].計(jì)算機(jī)與現(xiàn)代化,2011(07):168-171.
作者簡(jiǎn)介:
方開(kāi)紅(1978-),男,碩士,講師.研究領(lǐng)域:計(jì)算機(jī)應(yīng)用技 術(shù),網(wǎng)絡(luò)視頻傳輸技術(shù)及軟件開(kāi)發(fā)與設(shè)計(jì).