這篇文章主要介紹“ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)有哪些”,在日常操作中,相信很多人在ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、開(kāi)平網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為開(kāi)平等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
一. ADO.NET的定義
ADO.NET來(lái)源于COM組件庫(kù)ADO(即ActiveX Data Objects),是微軟公司新一代.NET數(shù)據(jù)庫(kù)的訪問(wèn)模型,是目前數(shù)據(jù)庫(kù)程序設(shè)計(jì)人員用來(lái)開(kāi)發(fā)基于.NET的數(shù)據(jù)庫(kù)應(yīng)用程序的主要接口。它利用.NET Data Provider(數(shù)據(jù)提供程序)進(jìn)行數(shù)據(jù)庫(kù)的連接和訪問(wèn),通過(guò)ADO.NET數(shù)據(jù)庫(kù)程序能夠使用各種對(duì)象來(lái)訪問(wèn)符合條件的數(shù)據(jù)庫(kù)內(nèi)容,讓提供數(shù)據(jù)庫(kù)管理系統(tǒng)的各個(gè)廠商可以根據(jù)此標(biāo)準(zhǔn)開(kāi)放對(duì)應(yīng)的.NET Data Provider,這樣設(shè)計(jì)數(shù)據(jù)庫(kù)應(yīng)用程序人員不必了解各類數(shù)據(jù)庫(kù)底層運(yùn)作的細(xì)節(jié),只要掌握ADO.NET所提供對(duì)象的模型,便可訪問(wèn)所有支持.NET Data Provider的數(shù)據(jù)庫(kù)。
ADO.NET結(jié)構(gòu)模型如下所示:
圖1. ADO.NET結(jié)構(gòu)模型
ADO.NET是一個(gè)類庫(kù),這些類提供了很多的對(duì)象,可用于完成數(shù)據(jù)庫(kù)連接和增刪查改等操作。其中包括如下五個(gè)對(duì)象: 1)Connection:用來(lái)連接數(shù)據(jù)庫(kù)(SQL Server使用的是SqlConnection對(duì)象); 2)Command:用來(lái)對(duì)數(shù)據(jù)庫(kù)執(zhí)行SQL命令,如增刪查改等操作; 3)DataReader:用來(lái)從數(shù)據(jù)庫(kù)中返回只讀數(shù)據(jù),用數(shù)據(jù)源填充DataSet對(duì)象; 4)DataAdapter:與DataSet對(duì)象相結(jié)合使用,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的控制; 5)DataSet:可看作離線時(shí)內(nèi)存中的數(shù)據(jù)庫(kù); 這五個(gè)對(duì)象提供了兩種讀取數(shù)據(jù)庫(kù)的方式; 第一種方式:使用Connection、Command、DataReader,其權(quán)限只能讀取或查詢數(shù)據(jù)庫(kù); 第二種方式:使用Connection、Command、DataAdapter、DataSet,其權(quán)限能進(jìn)行各種數(shù)據(jù)庫(kù)的操作。 ADO.NET讀取數(shù)據(jù)庫(kù)操作示意圖:
圖1. ADO.NET結(jié)構(gòu)模型
二. 使用ADO.NET在線訪問(wèn)數(shù)據(jù)庫(kù)的步驟(這里用的是SQL Server 數(shù)據(jù)庫(kù))
1. 連接數(shù)據(jù)庫(kù)
直接上一段代碼:
using System.Data.SqlClient; string source = "server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa"; SqlConnection conn = new SqlConnection(source); conn.Open(); // 對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行操作 conn.Close();
(1). 首先添加命名空間System.Data.SqlClient;
(2). 定義數(shù)據(jù)庫(kù)連接字符串:
第一種方法:直接把數(shù)據(jù)庫(kù)連接字符串存放在字符串對(duì)象中,如上代碼所示;
第二種方法Web:將數(shù)據(jù)庫(kù)連接信息存放在web.config配置文件中,然后通過(guò)使用ConfigurationStringSettings類進(jìn)行調(diào)用。來(lái)個(gè)例子說(shuō)明一下:
(a). 首先,在web.config配置文件的部分定義數(shù)據(jù)庫(kù)連接信息:
<configuration> <connectionStrings> <add name="myDatabase" connectionString="server=(local); integrated security=SSPI; database=myDateabase;User ID=sa;pwd=sa" providerName="System.Data.SqlClient" /> </connectionStrings> </configuration>
(b). 在項(xiàng)目文件中,添加對(duì)Configuration的引用,在頭部添加using System.Configuration。然后定義數(shù)據(jù)庫(kù)連接字符串為:
復(fù)制代碼 代碼如下:
string connstring = ConfigurationManager.ConnectionStrings["myDatabase"].ConnectionString;
備注:必須添加對(duì)System.Configuration程序集的引用,才能解析上述代碼中使用的ConfigurationManager類。
2. 創(chuàng)建數(shù)據(jù)庫(kù)連接
1)創(chuàng)建Connection對(duì)象:
string conn = new SqlConnection(connString);
2)打開(kāi)數(shù)據(jù)庫(kù): conn.Open(); 一般情況下,當(dāng)在.NET中使用“稀缺”的資源時(shí),如數(shù)據(jù)庫(kù)連接、窗口或圖形對(duì)象,最好確保每個(gè)資源在使用完畢后立即關(guān)閉。盡管.NET的設(shè)計(jì)人員實(shí)現(xiàn)了自動(dòng)垃圾收集機(jī)制,垃圾最終會(huì)被回收,但仍需要盡可能早地釋放資源,以避免出現(xiàn)資源匱乏的情況。 當(dāng)編寫(xiě)訪問(wèn)數(shù)據(jù)庫(kù)的代碼時(shí),因?yàn)槭惯B接打開(kāi)的時(shí)間略長(zhǎng)于需要的時(shí)間,就可能影響其他會(huì)話。在極端的情況下,不關(guān)閉連接可能會(huì)使其他用戶無(wú)法進(jìn)入一整組數(shù)據(jù)表,極大地降低應(yīng)用程序的性能。主要有兩種方式可以確保數(shù)據(jù)庫(kù)連接等類似的“稀缺”資源在使用完后立即釋放。這兩種方式如下: (1)第一種方式:采用try...catch...finally語(yǔ)句塊 確保在finally中關(guān)閉任何已打開(kāi)的連接。
try { // open the connection conn.Open(); // 對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行操作 } catch (SqlException ex) { // log the exception } finally { conn.Close(); }
在給定的方法中可能會(huì)打開(kāi)許多資源,這樣try...catch...finally塊的層次有時(shí)候不容易看清。還有一種方式可以確保資源的關(guān)閉——using語(yǔ)句。 (2)使用using語(yǔ)句塊
using(SqlConnection conn = new SqlConnection(connstring)){ // Open the connection conn.Open(); // 對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行操作 }
無(wú)論塊是如何退出的,using子句都會(huì)確保關(guān)閉數(shù)據(jù)庫(kù)連接。
3. 創(chuàng)建數(shù)據(jù)庫(kù)操作命令:
Connection對(duì)象與數(shù)據(jù)源建立連接后,使用Command對(duì)象對(duì)數(shù)據(jù)源執(zhí)行查詢、插入、修改和刪除等操作。
(1) 創(chuàng)建SQL數(shù)據(jù)庫(kù)操作命令: sqlQuery查詢語(yǔ)句具體規(guī)則請(qǐng)?jiān)斠?jiàn)我的系列文章:【讀書(shū)筆記】SQL Server查詢語(yǔ)句_鄧智容 (2) 創(chuàng)建Command對(duì)象:
(a). 方法一:
復(fù)制代碼 代碼如下:
SqlCommand command = new SqlCommand(); command.Connection = conn; command.CommandText = "SQL語(yǔ)句";
(b). 方法二:
SqlCommand command = new SqlCommand("SQL語(yǔ)句", conn);
備注: 1). SQL查詢語(yǔ)句若含有C#程序的變量并以字符串形式連接,則應(yīng)注意數(shù)據(jù)為非數(shù)字的變量應(yīng)用單引號(hào)括起來(lái); 2). 在SQL查詢語(yǔ)句中使用參數(shù)化查詢語(yǔ)句的話,譬如:
command.CommandText = "SELECT * FROM myTable WHERE siteName=@siteName";
當(dāng)需要給該參數(shù)賦值時(shí),可以使用Command對(duì)象建立參數(shù)對(duì)象,然后再賦值:
復(fù)制代碼 代碼如下:
command.Parameters.Add(new SqlParameter(@siteName, siteName)); command.Parameters["@siteName"].Value = "http://#";
備注: 在.Net Framework 2.0中SqlClient增加了AddWithValue(string parameterName, object value)方法。該方法簡(jiǎn)化了調(diào)用儲(chǔ)存過(guò)程的輸入?yún)?shù)過(guò)程,在運(yùn)行時(shí)對(duì)所輸入的數(shù)據(jù)類型進(jìn)行判斷,獲取對(duì)應(yīng)的數(shù)據(jù)庫(kù)類型。 因此該方法在運(yùn)行效率上比用 Add(string parameterName, SqlDbType sqlDbType, int size, string sourceColumn)方法要低。 在效率要求較高的地方仍然建議使用Add()方法,其它場(chǎng)合可以使用AddWithValue()簡(jiǎn)化代碼編寫(xiě)量。
4. 執(zhí)行sqlQuery命令:
定義好命令后,就需要執(zhí)行它。執(zhí)行的語(yǔ)句有多種方式,這取決于要從命令中返回什么數(shù)據(jù)。Command類提供了下述可執(zhí)行的命令: (1) ExecuteNonQuery() —— 執(zhí)行命令,但不返回任何結(jié)果。一般用于UPDATE、INSERT或DELETE語(yǔ)句中,其中唯一的返回值是受影響的記錄個(gè)數(shù)。但如果調(diào)用帶有輸出參數(shù)的存儲(chǔ)過(guò)程,該方法就有返回值。 (2) ExecuteReader() —— 執(zhí)行命令,返回一個(gè)類型化的IDataReader。是從數(shù)據(jù)源中選擇某些數(shù)據(jù)的最簡(jiǎn)單快捷的方法。 (3) ExecuteScalar() —— 執(zhí)行命令,返回結(jié)果集中的第一行第一列的值。
5. 對(duì)數(shù)據(jù)庫(kù)操作完畢后關(guān)閉數(shù)據(jù)庫(kù)連接:
conn.Close();
三. 離線數(shù)據(jù)庫(kù)訪問(wèn)
DataAdapter對(duì)象主要在Connection對(duì)象和DataSet對(duì)象之間執(zhí)行數(shù)據(jù)的傳輸工作,將數(shù)據(jù)填充到DataSet對(duì)象中,也可把DataSet對(duì)象更新后的數(shù)據(jù)返回到數(shù)據(jù)源中,也可架構(gòu)在Command對(duì)象上,通過(guò)CommandBuilding對(duì)象生成DataAdapter的Insert、Update和Delete等SQL操作命令。使用DataSet和DataTable對(duì)象訪問(wèn)數(shù)據(jù)源后,ADO.NET會(huì)自動(dòng)離線,在內(nèi)存中處理數(shù)據(jù),如有修改數(shù)據(jù)的操作,將自動(dòng)重新連接數(shù)據(jù)源,更新數(shù)據(jù)庫(kù)。DataSet對(duì)象、DataAdapter對(duì)象與數(shù)據(jù)源之間的關(guān)系如下:
DataSet <---> DataAdapter <---> 數(shù)據(jù)源
下面是使用DataAdapter進(jìn)行離線數(shù)據(jù)庫(kù)訪問(wèn)的操作步驟:
1. 創(chuàng)建DataAdapter、DataTable對(duì)象(使用的是SQL Server數(shù)據(jù)庫(kù))
復(fù)制代碼 代碼如下:
SqlAdapter da = new SqlAdapter("sqlQuery查詢語(yǔ)句", conn); DataSet = ds = new DataSet(); DataTable dt = new DataTable();
2. 將數(shù)據(jù)填充到DataTable對(duì)象
da.Fill(ds, "TableName"); dt = ds.Tables["TableName"];
3. 對(duì)DataTable中的數(shù)據(jù)進(jìn)行處理 TataTable對(duì)象的屬性和方法有:
名稱 屬性/方法 說(shuō)明
Rows.Add() 方法 插入新數(shù)據(jù)行
Rows[n].Delete() 方法 刪除第n行的記錄
Rows.Count 屬性 獲取行數(shù)
Rows[i]["ColumnName"] 屬性 獲取第i行、列名為ColumnName的值
Rows[i][j] 屬性 獲取第i行、第j列的值
到此,關(guān)于“ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
名稱欄目:ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)有哪些
轉(zhuǎn)載來(lái)于:http://www.rwnh.cn/article10/ippddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、域名注冊(cè)、自適應(yīng)網(wǎng)站、微信小程序、建站公司、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)