[摘要] ADO.NET是微軟公司推出的.NET Framework中用以操作數(shù)據(jù)庫(kù)的核心組件,是一種全新的數(shù)據(jù)庫(kù)訪問(wèn)機(jī)制。本文介紹了ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),分析了ADO.NET中的各種對(duì)象及常用屬性和方法。通過(guò)具體實(shí)例,介紹了ASP.NET環(huán)境下利用ADO.NET訪問(wèn)Web數(shù)據(jù)庫(kù)的技術(shù),并給出了部分的實(shí)現(xiàn)代碼。
[關(guān)鍵詞] ADO.NET 數(shù)據(jù)對(duì)象 Web應(yīng)用
一、ADO.NET 概述
ADO.NET是微軟公司推出的。NET Framework中用以操作數(shù)據(jù)庫(kù)的核心組件。是一種全新的數(shù)據(jù)庫(kù)訪問(wèn)機(jī)制。相對(duì)于ADO,它的最大優(yōu)勢(shì)就是支持離線訪問(wèn),即對(duì)于數(shù)據(jù)的更新修改可以在與數(shù)據(jù)源完全斷開(kāi)連接的情況下進(jìn)行,然后再把數(shù)據(jù)更新情況傳回到數(shù)據(jù)源。這樣大大減少了連接過(guò)多對(duì)于數(shù)據(jù)庫(kù)服務(wù)器資源的占用。這對(duì)訪問(wèn)Web數(shù)據(jù)庫(kù)是非常重要的。另外,ADO.NET中內(nèi)存數(shù)據(jù)和傳輸數(shù)據(jù)都以XML格式表示,XML是一種存儲(chǔ)和傳輸數(shù)據(jù)的行業(yè)標(biāo)準(zhǔn)格式,可以被多種操作數(shù)據(jù)接口所接受,能穿透公司防火墻,因此,ADO.NET具有跨平臺(tái)性和良好的交互性。
二、ADO.NET對(duì)象模型
ADO.NET有兩個(gè)核心組件構(gòu)成,. NET Framework數(shù)據(jù)提供程序和DataSet對(duì)象,而. NET Framework數(shù)據(jù)提供程序包括Connection、Command、DataReader和DataAdapter對(duì)象。下面分別介紹這五個(gè)對(duì)象。
1.Connection對(duì)象:數(shù)據(jù)庫(kù)應(yīng)用程序與數(shù)據(jù)庫(kù)進(jìn)行交互首先必須建立與數(shù)據(jù)庫(kù)的連接,在ADO.NET中可以使用Connection對(duì)象來(lái)建立與數(shù)據(jù)庫(kù)的連接。在建立連接時(shí),要提供一些信息,如數(shù)據(jù)庫(kù)所在位置、數(shù)據(jù)庫(kù)名稱、用戶賬號(hào)、密碼等。
Connection對(duì)象的常用屬性有ConnectionString屬性,該屬性用來(lái)設(shè)置連接字符串,即指定要連接的數(shù)據(jù)庫(kù)。
2.Command對(duì)象:對(duì)數(shù)據(jù)庫(kù)執(zhí)行命令操作,如進(jìn)行數(shù)據(jù)的查詢、修改、添加、刪除等,可使用Command 對(duì)象。Command對(duì)象的常用屬性有:
(1)CommandType 屬性:用來(lái)設(shè)置Command 對(duì)象要執(zhí)行的命令類型,即SQL 語(yǔ)句、數(shù)據(jù)表名稱和存儲(chǔ)過(guò)程中的一種。
(2)CommandText 屬性:用來(lái)設(shè)置要對(duì)數(shù)據(jù)庫(kù)執(zhí)行的SQL 語(yǔ)句、數(shù)據(jù)表名稱或存儲(chǔ)過(guò)程名。
(3)Connection 屬性:用來(lái)設(shè)置要通過(guò)哪個(gè)Connection對(duì)象執(zhí)行命令。
3.DataAdapter對(duì)象:DataAdapter對(duì)象承擔(dān)著數(shù)據(jù)源和DataSet對(duì)象之間的數(shù)據(jù)交互任務(wù),它可以選擇數(shù)據(jù)源中的數(shù)據(jù)填充到DataSet對(duì)象,也可以當(dāng)DataSet對(duì)象中發(fā)生改變時(shí)來(lái)更新數(shù)據(jù)源以反映這種變化。Dataadapter對(duì)象的常用屬性有:
(1)Selectcommand 屬性:用于選擇數(shù)據(jù)源中的記錄。
(2)Insertcommand 屬性:用于往數(shù)據(jù)源中添加新記錄。
(3)Updatacommand 屬性:用于更新數(shù)據(jù)源中的記錄。
(4)Deletecommand 屬性:用于從數(shù)據(jù)源中刪除記錄。
Dataadapter 常用方法:Fill 方法:其主要作用是從數(shù)據(jù)源中選擇數(shù)據(jù)以填充數(shù)據(jù)集;Updata方法:在對(duì)數(shù)據(jù)集完成增加、刪除或修改工作后,再調(diào)用Updata方法更新數(shù)據(jù)源。
4.DataReader 對(duì)象:該對(duì)象用于從數(shù)據(jù)庫(kù)中讀取由SELECT命令返回的、僅向前的只讀數(shù)據(jù)流,而且當(dāng)前內(nèi)存中每次只存一條記錄。DataReader 適用于只需返回一個(gè)簡(jiǎn)單的只讀記錄集的情況。
DataReader 對(duì)象常用方法為Read,用于從查詢結(jié)果中獲取記錄行。
5.DataSet對(duì)象:DateSet(數(shù)據(jù)集)對(duì)象正是實(shí)現(xiàn)離線訪問(wèn)技術(shù)的核心。DataSet不依賴于數(shù)據(jù)源(如數(shù)據(jù)庫(kù)) 而獨(dú)立存在于內(nèi)存中,可以把DataSet想象成內(nèi)存中的數(shù)據(jù)庫(kù),DateSet對(duì)象中數(shù)據(jù)采用XML格式表示,借助XML 可以描述具有復(fù)雜關(guān)系的數(shù)據(jù), 這使得采用DataSet對(duì)象能夠容納相互之間具有復(fù)雜關(guān)系的數(shù)據(jù);因此一個(gè)DataSet除了可以包含任意數(shù)目的表,每個(gè)表一般對(duì)應(yīng)于一個(gè)數(shù)據(jù)庫(kù)表或視圖之外,一個(gè)DataSet還可以包含表間關(guān)系、數(shù)據(jù)約束等,所有這些和關(guān)系數(shù)據(jù)庫(kù)模型基本一致,所以無(wú)論它包含的數(shù)據(jù)來(lái)自什么數(shù)據(jù)源,都會(huì)提供一致的關(guān)系編程模型。
一個(gè)Dataset對(duì)象包括表集合(DataTableCollection)和關(guān)系集合(DataRelationCollection),表集合由一組Datatable對(duì)象組成,關(guān)系集合由一組Datarelation對(duì)象組成。
Datatable對(duì)象:表示創(chuàng)建在Dataset中的一個(gè)表。
Datarelation對(duì)象:表示兩個(gè)表之間的關(guān)系。
三、通過(guò)ADO.NET訪問(wèn)WEB數(shù)據(jù)庫(kù)的實(shí)例
支持離線訪問(wèn)是ADO.NET的最大優(yōu)勢(shì),這在訪問(wèn)WEB數(shù)據(jù)庫(kù)時(shí)才得以體現(xiàn)出來(lái),下面以一個(gè)網(wǎng)站商品管理系統(tǒng)的商品查詢模塊為例來(lái)說(shuō)明利用ADO.NET對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)過(guò)程。程序使用C#.NET編寫有關(guān)代碼,數(shù)據(jù)庫(kù)服務(wù)器為SQL Server2000,用戶數(shù)據(jù)庫(kù)的名稱為“商品管理”,為作者自建的示例數(shù)據(jù)庫(kù),“商品”為“商品管理”數(shù)據(jù)庫(kù)下的表,它包括如下字段:商品編號(hào)、商品名稱、生產(chǎn)廠商、型號(hào)、商品價(jià)格等。開(kāi)發(fā)工具采用Visual Studio.NET 2003。
商品價(jià)格查詢功能是:在打開(kāi)的網(wǎng)頁(yè)上輸入待查找的商品名稱,單擊查詢按鈕,則在頁(yè)面輸出查詢結(jié)果。因?yàn)锳SP.NET采用了網(wǎng)頁(yè)HTML代碼與程序代碼分開(kāi)的做法,這里只列出程序代碼:
namespace WebApp
{ public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.DataGrid DataGrid1;
private void Page_Load(object sender, System.EventArgs e)
{
}
private void Query(object sender, System.EventArgs e)
{
string sqlstr1=”SELECT * FROM 商品where 商品名稱=@name”;
string connstr1 =“data source=localhost; initial catalog=商品管理;user id=sa;password=”;
SqlConnection sqlConn1 = new System.Data.SqlClient.SqlConnection(connstr1);
SqlCommand sqlCmd1 = new SqlCommand(sqlstr1,sqlCon1);
SqlParameter sqlPar1=new SqlParameter(“@name”,SqlDbType.NVarChar,20);
sqlPar1.Value=this.TextBox1.Text;
sqlCmd1.Parameters.Add(sqlPar1);
SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter(sqlCmd1);
DataSet dataSet1 = new DataSet();
sqlDataAdapter1.Fill(dataSet1,“商品”);
DataGrid1.DataSource=dataSet1;
DataGrid1.DataBind();
四、總結(jié)
隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)數(shù)據(jù)庫(kù)以及相應(yīng)的訪問(wèn)技術(shù)也是不斷的發(fā)展完善,ADO.NET 數(shù)據(jù)訪問(wèn)技術(shù)就是其中之一,越來(lái)越多的人開(kāi)始使用它開(kāi)發(fā)Web 數(shù)據(jù)庫(kù)應(yīng)用程序。
參考文獻(xiàn):
[1]萬(wàn)松明張濱義譯:Martin Brett Tomson.循序漸進(jìn)ASP.NET教程,北京:人民郵電出版社
[2]鄒建峰李律松李曉栓:ASP.NET開(kāi)發(fā)技術(shù)詳解[M].北京:人民郵電出版社,2005.1
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。