999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

ADO.NET中在線處理數(shù)據(jù)的方法

2008-12-31 00:00:00胡湘萍李彥勤
電腦知識與技術(shù) 2008年14期

摘要:Visual Studio.NET作為最新一代的軟件開發(fā)環(huán)境,對數(shù)據(jù)庫編程有著強(qiáng)大而有力支持。在.NET平臺上,Microsoft推出了最新的數(shù)據(jù)庫訪問技術(shù)ADO.NET。本文講述ADO.NET中三個常用的類(Connection、Command、DataReader)的對象,學(xué)會運用這三個類的對象來對數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行靈活的在線處理的方法。

關(guān)鍵詞:連接類; 命令類;數(shù)據(jù)讀取器類

中圖分類號:TP393文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2008)14-20805-03

1 Data Providers(數(shù)據(jù)提供者)

簡單的理解,數(shù)據(jù)源就是數(shù)據(jù)庫,它同時也能夠是文本文件、Excel表格或者XML文件。本文將以SQL Server 2000為示例數(shù)據(jù)庫服務(wù)器,Pubs為示例數(shù)據(jù)庫,語言上選擇最適合.NET平臺的C#語言。

ADO.NET是一組處理數(shù)據(jù)的類。應(yīng)用中可能需要與不同類型的數(shù)據(jù)源或者數(shù)據(jù)庫交互。但是并沒有這樣的一組類庫可以達(dá)到這個目的,因為各個數(shù)據(jù)源的協(xié)議各不相同,需要通過正確的協(xié)議來訪問數(shù)據(jù)源。有些比較老的數(shù)據(jù)源用ODBC協(xié)議,其后的一些數(shù)據(jù)源用OleDb協(xié)議,現(xiàn)在仍然還有許多新的數(shù)據(jù)源不斷出現(xiàn)。使用ADO.NET類庫,你可以直接訪問所有的數(shù)據(jù)源。

ADO.NET提供了訪問數(shù)據(jù)源的公共方法,對于不同的數(shù)據(jù)源,它采用不同的類庫。這些類庫稱為Data Providers,并且通常是以數(shù)據(jù)源的類型以及協(xié)議來命名的。

舉一個實際的例子來理解表格中的API前綴。你接觸到的第一個ADO.NET對象是連接類的對象(connection object),你可以通過它建立與數(shù)據(jù)源的連接。如果使用OleDb Data Provider連接一個提供OleDb接口的數(shù)據(jù)源,那么將使用的連接類就是OleDbConnection。同理,在本文中使用的數(shù)據(jù)源是SQL Server,所以所有的API對象都帶有Sql前綴,比如SqlConnection。針對每一種Data Provider都有相應(yīng)的命名空間,包含數(shù)據(jù)處理所需的所有的類。比如使用SqlServer數(shù)據(jù)源需要的類都包含在System.Data.SqlClient命名空間中。

2 ADO.NET中三個對象

ADO.NET里包括的類很抽象,經(jīng)過總結(jié)如下圖1,結(jié)合本圖先了解一下其中三個常用類的功能,然后再來應(yīng)用它們的對象進(jìn)行數(shù)據(jù)處理。

2.1 SqlConnection Object(連接類的對象)

要訪問一個數(shù)據(jù)源,你必須先建立一個到它的連接。這個連接里描述了數(shù)據(jù)庫服務(wù)器類型、數(shù)據(jù)庫名字、用戶名、密碼,和連接數(shù)據(jù)庫所需要的其它參數(shù)。Command對象通過使用connection對象來知道是在哪個數(shù)據(jù)庫上面執(zhí)行SQL命令。

連接對象創(chuàng)建方法如下:

SqlConnection conn=new SqlConnection(\"Data Source=(local); Initial Catalog=Pubs; User ID=sa; password=123;\");

對于連接類對象來說,ConnectionString屬性即說明了連接類對象的連接方法。在創(chuàng)建并初始化連接對象時可以在構(gòu)造函數(shù)中說明連接字符串屬性,當(dāng)然也可以后來再設(shè)置。連接字符串中各關(guān)鍵字的意義如下:[2]

DataSource或Server:數(shù)據(jù)源或服務(wù)器。“(local)”表示本地服務(wù)器,此外,“.”或“l(fā)ocalhost”都表示本地服務(wù)器。

Initial Catalog或dataBase:指定初始目錄或數(shù)據(jù)庫。

User ID或uid:登陸服務(wù)器的賬戶名。

Password或pwd:登陸服務(wù)器的密碼。

連接類對象有兩個方法用來打開和關(guān)閉與數(shù)據(jù)源的連接。

Open()方法:打開連接,應(yīng)用程序使用數(shù)據(jù)源數(shù)據(jù)之前要求調(diào)用連接類對象的此方法打開與數(shù)據(jù)源的連接。

Close()方法:關(guān)閉連接,應(yīng)用程序使用數(shù)據(jù)源數(shù)據(jù)完畢后,最好關(guān)閉與數(shù)據(jù)源的連接,釋放所占的連接。

2.2 SqlCommand Object(命令類的對象)

連接數(shù)據(jù)庫后就可以開始想要執(zhí)行的數(shù)據(jù)庫操作,這個是通過command對象完成,command對象一般被用來發(fā)送SQL語句給數(shù)據(jù)庫。command對象通過connection對象得知道應(yīng)該與哪個數(shù)據(jù)庫進(jìn)行連接。

SqlCommand cmd=new SqlCommand();

cmd.Connection=conn;

cmd.CommandText=\"select * from users\";

以上語句建立Command,根據(jù)習(xí)慣不同,也可以使用以下方法:

SqlCommand cmd=new SqlCommand(\"select * from users\",conn);

對于命令類的對象來說,CommandText屬性用于記錄下要對數(shù)據(jù)源執(zhí)行的SQL語句命令,Connection屬性用于記錄命令通過什么樣的連接訪問數(shù)據(jù)源。

以上代碼并沒有執(zhí)行SQL語句記錄的命令,SqlCommand類的對象本身提供的三種常用的執(zhí)行命令的方法分別為:[3]

ExecuteNonQuery()方法:非查詢類型SQL語句命令執(zhí)行方法。對連接執(zhí)行SQL語句并返回受影響的行數(shù)。當(dāng)要對數(shù)據(jù)源進(jìn)行插入、刪除和更新數(shù)據(jù)時,先將命令對象的命令字符串指定到插入或更新的SQL語句,然后執(zhí)行ExecuteNonQuery()方法。當(dāng)然,執(zhí)行命令前需要打開與數(shù)據(jù)源的連接。

ExecuteReader()方法:執(zhí)行一個select類型的SQL命令,返回一個SqlDataReader對象。調(diào)用該方法前,需要將命令字符串設(shè)置到一個Select查詢語句,然后調(diào)用該方法,返回SqlDataReader對象,該對象中保存了需要的數(shù)據(jù)。同樣的,執(zhí)行命令前需要打開數(shù)據(jù)源的連接,如果在讀取SqlDataReader對象中記錄的數(shù)據(jù)時,也不可以斷開連接。

ExecuteScaler()方法:執(zhí)行一個SQL命令,返回記錄行的第一個字段。調(diào)用該方法前,需要將命令字符串設(shè)置到一個Select查詢語句,然后調(diào)用該方法,返回記錄行的第一個字段。執(zhí)行命令前也要打開與數(shù)據(jù)源的連接。

由此可見,當(dāng)使用的SQL命令類型不同,在執(zhí)行命令時調(diào)用的執(zhí)行函數(shù)有所不同。

2.3 SqlDataReader Object:數(shù)據(jù)讀取器類的對象

通過dataReader對象,可以獲得從command對象的SELECT語句篩選的結(jié)果。dataReader返回的數(shù)據(jù)流被設(shè)計為只讀的、單向的,這將意味著你只能按照一定的順序從數(shù)據(jù)流中取出數(shù)據(jù)。這樣你獲得了性能上的提升,但是缺點也是明顯的,不能夠操作取回數(shù)據(jù),如果需要操作編輯數(shù)據(jù),解決的辦法是使用DataSet。但SqlDataReader可以快速的從數(shù)據(jù)源獲得只讀的,向前的數(shù)據(jù)流。

ADO.NET中沒有構(gòu)造函數(shù)創(chuàng)建DataReader對象。通常使用Command類的ExecuteReader()方法來創(chuàng)建DataReader對象:

SqlDataReader oDR=cmd.ExecuteReader();

oDR.Read();

函數(shù)read()用于逐條讀取數(shù)據(jù),同時光標(biāo)移到下一條記錄所在位置,返回值為一個bool值,如果讀到記錄則為true,否則為1。[4]

ADO.NET包含了許多的Data Providers,分別用于訪問不同的數(shù)據(jù)源。然而無論使用什么樣的Data Provider,與數(shù)據(jù)源進(jìn)行交互的對象的使用方法都是相似的。XxxConnection對象用于管理與數(shù)據(jù)源的連接。XxxCommand對象可以向數(shù)據(jù)源發(fā)送SQL命令。XxxDataReader可以快速從數(shù)據(jù)源獲得只讀的,向前的數(shù)據(jù)流。

3 應(yīng)用程序處理數(shù)據(jù)源中的數(shù)據(jù)

認(rèn)識了ADO.NET中的三個基本的對象,應(yīng)用程序就可以實現(xiàn)在線處理數(shù)據(jù)。具體需要如何處理,需要結(jié)合實際情況寫出相應(yīng)的SQL語句命令,之后就可以討論如何處理數(shù)據(jù)的過程了。

3.1 應(yīng)用程序通過dataReader對象讀數(shù)據(jù)

通過在線的方式讀取數(shù)據(jù)源中的數(shù)據(jù)供應(yīng)用程序的使用,我們可以簡化成如下四步(見圖中豎向箭頭讀取數(shù)據(jù)的方式):

(1)建連接:建立與數(shù)據(jù)源的連接對象。

(2)建命令:建立要對數(shù)據(jù)源執(zhí)行的命令對象。

(3)執(zhí)行命令:執(zhí)行命令對象中記錄的SQL語句命令。

(4)讀數(shù)據(jù):應(yīng)用程序讀取dataReader對象中記錄的數(shù)據(jù)。

例如://建連接

SqlConnection conn=new SqlConnection(“Data Source=(local);

Initial Catalog=Northwind;User ID=sa ; password=1234;”);

//建命令

SqlCommand cmd=new SqlCommand(“select * from authors”,conn);

//執(zhí)行命令

conn.Open();

SqlDataReader dr=cmd.ExecuteReader();

//讀數(shù)據(jù)

while(dr.Read())

{

……

}

dr.Close();

conn.Close();

3.2 應(yīng)用程序直接對數(shù)據(jù)源進(jìn)行數(shù)據(jù)添加、修改或刪除

倘若應(yīng)用程序需要對數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行添加、修改或是刪除。那么我們可以把此過程簡化成如下三步(見圖中向右處理數(shù)據(jù)的方式):

(1)建連接:建立與數(shù)據(jù)源的連接對象。

(2)建命令:建立要對數(shù)據(jù)源執(zhí)行的命令對象。

(3)執(zhí)行命令:執(zhí)行命令對象中記錄的SQL語句命令。

例如:

//建連接

SqlConnection conn=new SqlConnection(\"Data Source=(local); Initial Catalog=Pubs; User ID=sa; password=1234;\");//建命令

SqlCommand cmd=new SqlCommand(\"update authors set London='倫敦' where city='London'\",conn);

//執(zhí)行命令

conn.Open();

cmd.ExecuteNonQuery();

conn.Close();

4 結(jié)束語

本文講述的是ADO.NET中在線處理數(shù)據(jù)的一種方式。結(jié)合圖形,相信對于Connection、Command、DataReader這三個非常抽象的類的對象的學(xué)習(xí)會有很大的幫助。當(dāng)然本文重在結(jié)合三個對象處理數(shù)據(jù)的過程。對于每一類對象的知識細(xì)節(jié)還需讀者深入學(xué)習(xí)。應(yīng)用程序處理數(shù)據(jù)還有另外一種比較特色的方式,即離線處理數(shù)據(jù)。與本文中提到的在線處理數(shù)據(jù)方式有著很多的相同與不同之處,各有優(yōu)缺點,還需要進(jìn)一步學(xué)習(xí)。

參考文獻(xiàn):

[1] 參考網(wǎng)絡(luò)相關(guān)文章. http://blog.sina.com.cn/s/blog_54d1fb35010007rb.html.

[2] 李律松, 等. Visual C#數(shù)據(jù)庫高級教程[M]. 清華大學(xué)出版式社.

[3] Simon Robinson, Christian Nagel, 等. C#高級編程(第3版)[M].

[4] 李德奇. C#程序設(shè)計[M]. 科學(xué)出版社.

注:本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文

主站蜘蛛池模板: 中文字幕亚洲乱码熟女1区2区| 97视频精品全国免费观看| 国产人免费人成免费视频| 欧美日韩综合网| 丁香五月婷婷激情基地| 亚洲无码视频一区二区三区 | 国产后式a一视频| 毛片免费在线| 日韩精品免费一线在线观看| a级毛片在线免费| 国产中文一区a级毛片视频| 中国国产A一级毛片| 欧美亚洲欧美区| 欧美成人免费午夜全| 综合色亚洲| 亚洲成人福利网站| 亚洲av成人无码网站在线观看| 欧美黄网站免费观看| 大学生久久香蕉国产线观看| 天天干天天色综合网| a级毛片一区二区免费视频| 成年人国产视频| 欧美另类图片视频无弹跳第一页| 91色在线观看| 在线永久免费观看的毛片| 免费xxxxx在线观看网站| 99热国产这里只有精品无卡顿"| 国产男人的天堂| 亚洲精品男人天堂| 综合久久五月天| 在线免费a视频| 欧美精品啪啪| 日本精品视频一区二区| 无码'专区第一页| 国产sm重味一区二区三区| 在线精品亚洲一区二区古装| 熟妇无码人妻| 亚洲侵犯无码网址在线观看| 欧美精品在线免费| 91久久精品国产| 污视频日本| 精品国产网| 久久久久无码国产精品不卡| 国产精品久久国产精麻豆99网站| 日本一区高清| 亚洲欧美不卡中文字幕| 亚欧成人无码AV在线播放| 亚洲区欧美区| 欧美激情,国产精品| 五月天福利视频| 欧美福利在线观看| 秘书高跟黑色丝袜国产91在线| 狠狠色成人综合首页| 99久久精品免费看国产电影| 国产一区二区三区在线精品专区| 无码乱人伦一区二区亚洲一| 久草热视频在线| 香蕉蕉亚亚洲aav综合| 精品少妇人妻无码久久| 国产尤物视频在线| aⅴ免费在线观看| 91在线精品免费免费播放| 精品久久高清| 国产在线观看一区精品| 亚洲91精品视频| 自慰高潮喷白浆在线观看| 亚洲国产清纯| 日韩av手机在线| 亚洲AV人人澡人人双人| 福利国产微拍广场一区视频在线| 98超碰在线观看| a亚洲视频| 亚洲精品国产日韩无码AV永久免费网| 一本一道波多野结衣av黑人在线| 久久国产成人精品国产成人亚洲 | 中文字幕首页系列人妻| 久久国产免费观看| 欧美成人午夜在线全部免费| 国产青榴视频| 免费人成视网站在线不卡| 亚洲国产精品美女| 黄色网在线|