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