国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Ado.net數(shù)據(jù)庫訪問技術(shù)的研究與實(shí)現(xiàn)

2013-12-29 00:00:00方生
電腦知識與技術(shù) 2013年12期

摘要:在B/S模式或C/S模式系統(tǒng)開發(fā)中,ADO.NET對象是前臺頁面(或窗體)與后臺數(shù)據(jù)庫之間的重要橋梁。通過ADO.NET對象的數(shù)據(jù)庫訪問技術(shù),可以實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的讀取、插入、修改和刪除等操作。首先介紹了Ado.net組件的體系結(jié)構(gòu),其次分析了Ado.net數(shù)據(jù)庫訪問技術(shù)的兩種模式,最后針對這兩種模式,通過實(shí)例實(shí)現(xiàn)了應(yīng)用ADO.NET的數(shù)據(jù)庫訪問技術(shù)。

關(guān)鍵詞:ADO.NET;B/S;C/S;數(shù)據(jù)庫訪問技術(shù)

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)12-2758-03

在數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)中,數(shù)據(jù)的操作占據(jù)了大量的工作,要操作的數(shù)據(jù)既可以是存儲在數(shù)據(jù)庫中的數(shù)據(jù)、又可以是存儲在文件中的數(shù)據(jù)以及XML數(shù)據(jù),其中對存儲在數(shù)據(jù)庫中的數(shù)據(jù)的操作最為普遍。Ado.net技術(shù)是web頁面或者Winform窗體與數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)交互的一種重要技術(shù),它把對數(shù)據(jù)庫的操作分為幾個步驟,并為每個步驟提供對象來分裝操作過程,從而使得對數(shù)據(jù)庫中數(shù)據(jù)的操作變得簡單易行。

1 Ado.net組件體系結(jié)構(gòu)

Ado.net對Microsoft SQL Server數(shù)據(jù)庫和XML等數(shù)據(jù)源提供一致的訪問。我們可以使用Ado.net來連接到這些數(shù)據(jù)源,并檢索、處理和更新所包含的數(shù)據(jù)。

Ado.net組件將數(shù)據(jù)訪問與數(shù)據(jù)處理分離。它是通過兩個主要的組件:.NET數(shù)據(jù)提供程序(Data Provider)和Dataset來完成這一操作的。圖1說明了數(shù)據(jù)訪問與數(shù)據(jù)處理分離的概念。Ado.net體系結(jié)構(gòu)的一個核心元素是.Net數(shù)據(jù)提供程序,它是專門為數(shù)據(jù)處理以及快速地只進(jìn)、只讀訪問數(shù)據(jù)而設(shè)計的組件,包括Connection、Command、DataReader和DataAdapter對象的組件。[1]

taSet是Ado.net體系結(jié)構(gòu)中另一個核心組件,它是專門針對各種數(shù)據(jù)源的數(shù)據(jù)訪問獨(dú)立性而設(shè)計的,所以它可以用于多個不同的數(shù)據(jù)源。DataSet包含一個或多個DataTable對象的集合,這些對象由數(shù)據(jù)行和數(shù)據(jù)列,以及有關(guān)DataTable對象中數(shù)據(jù)的主鍵、外鍵、約束和關(guān)系信息組成。它相當(dāng)于內(nèi)存中的一個數(shù)據(jù)庫,但從不關(guān)心它的數(shù)據(jù)是從數(shù)據(jù)庫中、XML文件中還是其他什么數(shù)據(jù)源中獲得。

2 Ado.net訪問數(shù)據(jù)庫的兩種模式

針對不同的數(shù)據(jù)源訪問需求,ADO.NET為我們提供了兩種連接數(shù)據(jù)庫的方式:連接模式和斷開模式。[2]

2.1 基于連接模式下數(shù)據(jù)庫訪問技術(shù)

對數(shù)據(jù)的讀取和操作在斷開數(shù)據(jù)庫連接之前,這樣的工作方式稱為連接模式,使用DataReader對象來實(shí)現(xiàn)。DataReader從數(shù)據(jù)庫中檢索只讀、只進(jìn)的數(shù)據(jù)流。查詢結(jié)果在查詢執(zhí)行時返回,并存儲在客戶端的網(wǎng)絡(luò)緩沖區(qū)中,直到用戶使用DataReader的Read方法對它們發(fā)出請求。使用DataReader可以提高應(yīng)用程序的性能,原因是它只要數(shù)據(jù)可用就立即檢索數(shù)據(jù),并且一次只在內(nèi)存中存儲一行,減少了系統(tǒng)開銷。連接模式訪問數(shù)據(jù)庫數(shù)據(jù)原理如圖2所示。

由于DataReader允許對數(shù)據(jù)庫進(jìn)行直接、高性能的訪問,它只提供對數(shù)據(jù)的只讀和只向前的訪問,它返回的結(jié)果不會駐留在內(nèi)存中,并且它一次只能訪問一條記錄,對服務(wù)器的內(nèi)存要求較小,而且,只使用DataReader就可以顯示數(shù)據(jù)。所以,只需要顯示數(shù)據(jù)的應(yīng)用程序,盡量使用DataReader,因?yàn)樗鼘⑻峁┳罴训男阅堋?/p>

2.2 基于斷開模式下數(shù)據(jù)庫訪問技術(shù):

而對數(shù)據(jù)的讀取在斷開數(shù)據(jù)庫連接之后,這樣的工作方式稱為斷開模式,使用DataAdapter對象和DataSet對象配合實(shí)現(xiàn)。通過DataAdapter對象,向DataSet中填充數(shù)據(jù)。 DataAdapter對象充當(dāng)數(shù)據(jù)庫和DataSet之間的橋梁。能夠用來保存和檢索數(shù)據(jù)。DataAdapter對象的Fill方法用于將查詢結(jié)果填充到DataSet中,以便能夠?qū)崿F(xiàn)離線處理數(shù)據(jù)。DataSet從數(shù)據(jù)源中獲取數(shù)據(jù)以后就斷開了與數(shù)據(jù)源之間的連接。允許在DataSet中進(jìn)行增、刪、改以及查等各種操作。當(dāng)完成了各項(xiàng)操作以后還可以把DataSet中的數(shù)據(jù)送回到數(shù)據(jù)源。斷開模式訪問數(shù)據(jù)庫數(shù)據(jù)原理如圖3所示。

3 數(shù)據(jù)庫訪問技術(shù)的具體實(shí)現(xiàn)

3.1 數(shù)據(jù)庫連接的實(shí)現(xiàn)

下面的代碼通過 ADO.NET 連接到本地 SQL Server 中的student 數(shù)據(jù)庫。

public SqlConnection MyConnstring( )

{

string connstr = "Data Source=.;Initial Catalog=student;Integrated Security=True";

SqlConnection con = new SqlConnection(connstr);

return con;

}

3.2 從數(shù)據(jù)源中讀取數(shù)據(jù)的實(shí)現(xiàn)

讀取數(shù)據(jù)我們可以采用兩種方法實(shí)現(xiàn),一種是通過DataReader對象在連接模式下實(shí)現(xiàn),另一種是通過DataAdapter對象和DataSet對象配合使用的離線模式下實(shí)現(xiàn)。

1)連接模式實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的讀取操作,代碼如下:

private void SearchUserInfor_Click(object sender, EventArgs e)

{

MyConnstring().Open();

string SQL = "select UserName,UserPWD from users";

SqlCommand cmd = new SqlCommand(SQL, MyConnstring());

SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())

{

Console.WriteLine(“{0}\t{1}”,reader[0].ToString(),reader[1].ToString()) ;

}

reader.Close();

con.Close();

}

2)斷開模式下實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的讀取操作,代碼如下:

private void SearchUserInfor_Click(object sender, EventArgs e)

{

string SQL = "select * from users";

SqlDataAdapter da = new SqlDataAdapter(SQL,MyConnstring());

DataSet ds = new DataSet();

da.Fill(ds, "users");

for(int i=0;i

{

for(int j=0;j

{

Console.Write(ds.Tables[0]).Rows[i][j]+“\t”);

}

Console.Write(“\n”);

}

}

3.3 操作數(shù)據(jù)庫中數(shù)據(jù)的實(shí)現(xiàn)

1)在連接模式下,主要使用Command對象通過執(zhí)行SQL命令來操作數(shù)據(jù)庫。下面通過實(shí)例來實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的操作。代碼如下:

Public void OperateUserInfor (string SQL)

{

MyConnstring().Open();

SqlCommand cmd = new SqlCommand(SQL, MyConnstring());

if (cmd.ExecuteNonQuery() > 0)

{

MessageBox.Show("操作成功!");

}

else

{

Return;

}

con.Close();

}

對于上面的代碼,只要改變SQL語句就可以實(shí)現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的添加、刪除以及修改等操作。

2)利用DataSet對象可以實(shí)現(xiàn)在斷開模式下對數(shù)據(jù)庫數(shù)據(jù)的添加、刪除以及修改操作。當(dāng)添加數(shù)據(jù)時,具體實(shí)現(xiàn)代碼如下:

private void InsertUserInfor_Click(object sender, EventArgs e)

{

SqlCommand MySelectCmd=new SqlCommand("select * from users",MyConnstring());

SqlCommand MyInsertCmd=new SqlCommand("insert users values('"+UserName_TB .Text .Trim ()+"','"+UserPWD_TB.Text .Trim ()+"')",MyConnstring());

SqlDataAdapter MyAdapter=new SqlDataAdapter(); MyAdapter.SelectCommand=MySelectCmd ;

MyAdapter.InsertCommand=MyInsertCmd ;

DataSet MyDs=new DataSet();

MyAdapter.Fill(MyDs, "UserInfor"); (下轉(zhuǎn)第2767頁)

(上接第2760頁)

DataRow Row=MyDs.Tables[0].NewRow();

Row["UserName"]="fashion";

Row["UserPWD"]="123";

MyDs.Tables[0].Rows.Add(Row);

MyAdapter.Update(MyDs, "UserInfor");

}

當(dāng)要刪除數(shù)據(jù)時,可以通過DataRow對象的Delete方法刪除當(dāng)前行。更新數(shù)據(jù)集和添加、刪除數(shù)據(jù)的操作類似,首先獲得DataSet的某個數(shù)據(jù)表的DataTable對象,然后再獲得要更新數(shù)據(jù)的行對象DataRow,最后直接對DataRow對象進(jìn)行修改,并更新數(shù)據(jù)庫即可完成數(shù)據(jù)的修改工作。

4 結(jié)束語

應(yīng)用程序訪問數(shù)據(jù)庫中的數(shù)據(jù)時,既可以使用DataReader對象從數(shù)據(jù)庫中讀取數(shù)據(jù),又可以使用DataSet對象將數(shù)據(jù)放在本地內(nèi)存中,但兩者存在一定的差異。[3]

總之,兩者各有優(yōu)缺點(diǎn),具體使用哪種對象需要具體問題具體分析。當(dāng)數(shù)據(jù)量較少,不需要緩存數(shù)據(jù)時,可以使用DataReader;當(dāng)數(shù)據(jù)來源于多個數(shù)據(jù)庫,為減輕數(shù)據(jù)庫服務(wù)器的負(fù)擔(dān),則可以考慮使用DataSet。

參考文獻(xiàn):

[1] 張聯(lián)鋒,陳文臣.ASP.NET3.5程序設(shè)計與項(xiàng)目實(shí)踐[M].北京:電子工業(yè)出版社,2011.

[2] 劉維崗.基于AS P.NET的數(shù)據(jù)庫訪問技術(shù)研究與實(shí)現(xiàn)[J].信息時代,2012,2:50-53.

[3] 王晶晶.C#面向?qū)ο蟪绦蛟O(shè)計[M].北京:機(jī)械工業(yè)出版社,2010.

东兴市| 嘉峪关市| 九江县| 菏泽市| 绩溪县| 罗源县| 民乐县| 惠安县| 大港区| 安乡县| 阿克苏市| 六枝特区| 平山县| 万全县| 三明市| 崇左市| 美姑县| 麻江县| 蓬溪县| 定安县| 临朐县| 岳西县| 来安县| 游戏| 景泰县| 大新县| 卢龙县| 泾阳县| 涡阳县| 武隆县| 河东区| 青岛市| 丽江市| 建德市| 湛江市| 卓资县| 海丰县| 波密县| 玉林市| 梁山县| 大邑县|