一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - 數據庫技術 - ADO.NET數據庫訪問技術

ADO.NET數據庫訪問技術

2021-10-25 15:52Web_凳子君 數據庫技術

本篇文章主要介紹了ADO.NET數據庫訪問技術以及在線或離線訪問數據庫的實現步驟,有需要的朋友可以參考下

一. ado.net的定義


ado.net來源于com組件庫ado(即activex data objects),是微軟公司新一代.net數據庫的訪問模型,是目前數據庫程序設計人員用來開發基于.net的數據庫應用程序的主要接口。它利用.net data provider(數據提供程序)進行數據庫的連接和訪問,通過ado.net數據庫程序能夠使用各種對象來訪問符合條件的數據庫內容,讓提供數據庫管理系統的各個廠商可以根據此標準開放對應的.net data provider,這樣設計數據庫應用程序人員不必了解各類數據庫底層運作的細節,只要掌握ado.net所提供對象的模型,便可訪問所有支持.net data provider的數據庫。

ado.net結構模型如下所示:

ADO.NET數據庫訪問技術

 圖1. ado.net結構模型

  ado.net是一個類庫,這些類提供了很多的對象,可用于完成數據庫連接和增刪查改等操作。其中包括如下五個對象: 1)connection:用來連接數據庫(sql server使用的是sqlconnection對象); 2)command:用來對數據庫執行sql命令,如增刪查改等操作; 3)datareader:用來從數據庫中返回只讀數據,用數據源填充dataset對象; 4)dataadapter:與dataset對象相結合使用,實現對數據庫的控制; 5)dataset:可看作離線時內存中的數據庫; 這五個對象提供了兩種讀取數據庫的方式; 第一種方式:使用connection、command、datareader,其權限只能讀取或查詢數據庫; 第二種方式:使用connection、command、dataadapter、dataset,其權限能進行各種數據庫的操作。 ado.net讀取數據庫操作示意圖: 

ADO.NET數據庫訪問技術

圖1. ado.net結構模型

 
二. 使用ado.net在線訪問數據庫的步驟(這里用的是sql server 數據庫)
 
1. 連接數據庫
直接上一段代碼:

?
1
2
3
4
5
6
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();
// 對數據庫數據進行操作
conn.close();


  (1). 首先添加命名空間system.data.sqlclient;

(2). 定義數據庫連接字符串:

第一種方法:直接把數據庫連接字符串存放在字符串對象中,如上代碼所示;

第二種方法web:將數據庫連接信息存放在web.config配置文件中,然后通過使用configurationstringsettings類進行調用。來個例子說明一下:

(a). 首先,在web.config配置文件的部分定義數據庫連接信息:

?
1
2
3
4
5
<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). 在項目文件中,添加對configuration的引用,在頭部添加using system.configuration。然后定義數據庫連接字符串為:

 

復制代碼 代碼如下:
string connstring = configurationmanager.connectionstrings["mydatabase"].connectionstring;

 


備注:必須添加對system.configuration程序集的引用,才能解析上述代碼中使用的configurationmanager類。

2. 創建數據庫連接
1)創建connection對象:

?
1
string conn = new sqlconnection(connstring);

2)打開數據庫: conn.open(); 一般情況下,當在.net中使用“稀缺”的資源時,如數據庫連接、窗口或圖形對象,最好確保每個資源在使用完畢后立即關閉。盡管.net的設計人員實現了自動垃圾收集機制,垃圾最終會被回收,但仍需要盡可能早地釋放資源,以避免出現資源匱乏的情況。 當編寫訪問數據庫的代碼時,因為使連接打開的時間略長于需要的時間,就可能影響其他會話。在極端的情況下,不關閉連接可能會使其他用戶無法進入一整組數據表,極大地降低應用程序的性能。主要有兩種方式可以確保數據庫連接等類似的“稀缺”資源在使用完后立即釋放。這兩種方式如下: (1)第一種方式:采用try...catch...finally語句塊 確保在finally中關閉任何已打開的連接。

?
1
2
3
4
5
6
7
8
9
try {
// open the connection
conn.open();
// 對數據庫數據進行操作
} catch (sqlexception ex) {
// log the exception
} finally {
conn.close();
}


在給定的方法中可能會打開許多資源,這樣try...catch...finally塊的層次有時候不容易看清。還有一種方式可以確保資源的關閉——using語句。 (2)使用using語句塊

?
1
2
3
4
5
using(sqlconnection conn = new sqlconnection(connstring)){
// open the connection
conn.open();
// 對數據庫數據進行操作
}


無論塊是如何退出的,using子句都會確保關閉數據庫連接。 

 
3. 創建數據庫操作命令:


connection對象與數據源建立連接后,使用command對象對數據源執行查詢、插入、修改和刪除等操作。

(1) 創建sql數據庫操作命令: sqlquery查詢語句具體規則請詳見我的系列文章:【讀書筆記】sql server查詢語句_鄧智容 (2) 創建command對象:

(a). 方法一:

 

復制代碼 代碼如下:
sqlcommand command = new sqlcommand(); command.connection = conn; command.commandtext = "sql語句";

 

(b). 方法二:

?
1
sqlcommand command = new sqlcommand("sql語句", conn);

備注: 1). sql查詢語句若含有c#程序的變量并以字符串形式連接,則應注意數據為非數字的變量應用單引號括起來; 2). 在sql查詢語句中使用參數化查詢語句的話,譬如:

?
1
command.commandtext = "select * from mytable where sitename=@sitename";

當需要給該參數賦值時,可以使用command對象建立參數對象,然后再賦值:

 

復制代碼 代碼如下:
command.parameters.add(new sqlparameter(@sitename, sitename)); command.parameters["@sitename"].value = "http://#";

 

備注: 在.net framework 2.0中sqlclient增加了addwithvalue(string parametername, object value)方法。該方法簡化了調用儲存過程的輸入參數過程,在運行時對所輸入的數據類型進行判斷,獲取對應的數據庫類型。 因此該方法在運行效率上比用 add(string parametername, sqldbtype sqldbtype, int size, string sourcecolumn)方法要低。 在效率要求較高的地方仍然建議使用add()方法,其它場合可以使用addwithvalue()簡化代碼編寫量。

 
4. 執行sqlquery命令:


定義好命令后,就需要執行它。執行的語句有多種方式,這取決于要從命令中返回什么數據。command類提供了下述可執行的命令: (1) executenonquery() —— 執行命令,但不返回任何結果。一般用于update、insert或delete語句中,其中唯一的返回值是受影響的記錄個數。但如果調用帶有輸出參數的存儲過程,該方法就有返回值。 (2) executereader() —— 執行命令,返回一個類型化的idatareader。是從數據源中選擇某些數據的最簡單快捷的方法。 (3) executescalar() —— 執行命令,返回結果集中的第一行第一列的值。

 
5. 對數據庫操作完畢后關閉數據庫連接:

 

?
1
conn.close();

 
三. 離線數據庫訪問


dataadapter對象主要在connection對象和dataset對象之間執行數據的傳輸工作,將數據填充到dataset對象中,也可把dataset對象更新后的數據返回到數據源中,也可架構在command對象上,通過commandbuilding對象生成dataadapter的insert、update和delete等sql操作命令。使用dataset和datatable對象訪問數據源后,ado.net會自動離線,在內存中處理數據,如有修改數據的操作,將自動重新連接數據源,更新數據庫。dataset對象、dataadapter對象與數據源之間的關系如下:

dataset <---> dataadapter <---> 數據源
下面是使用dataadapter進行離線數據庫訪問的操作步驟:

1. 創建dataadapter、datatable對象(使用的是sql server數據庫)

 

復制代碼 代碼如下:
sqladapter da = new sqladapter("sqlquery查詢語句", conn); dataset = ds = new dataset(); datatable dt = new datatable();

 

2. 將數據填充到datatable對象

?
1
da.fill(ds, "tablename"); dt = ds.tables["tablename"];

3. 對datatable中的數據進行處理 tatatable對象的屬性和方法有: 

名稱 屬性/方法 說明
rows.add() 方法 插入新數據行
rows[n].delete() 方法 刪除第n行的記錄
rows.count 屬性 獲取行數
rows[i]["columnname"] 屬性 獲取第i行、列名為columnname的值
rows[i][j] 屬性 獲取第i行、第j列的值
 
  還有一種數據查詢技術:linq。下回再討論。

通過以上對ado.net數據庫訪問技術的介紹,希望對大家有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人操 | 毛片在线播放a | 娇喘高潮教室h | www一区二区| 欧美特级特黄a大片免费 | 欧美亚洲高清日韩成人 | 美女吃男生鸡鸡 | 国产婷婷高清在线观看免费 | 成人精品视频一区二区在线 | 农村老少伦小说 | 欧美高清在线精品一区 | 国产精品国产香蕉在线观看网 | 4hu四虎永久网址 | naruto堂同人本子汉化gg | 日本加勒比在线精品视频 | 女人张开腿让男人桶视频免费大全 | 四虎影视地址 | 国产精品免费视频能看 | 美女污视频 | 午夜福利合集1000在线 | 精久久| 人妖女天堂视频在线96 | 亚洲精品97福利在线 | www视频在线免费观看 | 91精品综合国产在线观看 | 男人和女人上床 | 亚洲天堂中文字幕 | 久久99精品久久久久久园产越南 | 超碰97 | 9久热久爱免费精品视频在线观看 | 国产精品区一区二区免费 | 女子校生下媚药在线观看 | 午夜欧美精品 | 亚洲区在线播放 | china国产bbw | 精品国产成人 | 国内自拍网红在线自拍综合 | 色老板成人永久免费视频 | 蝴蝶传媒免费安装 | 香蕉久久久久久狠狠色 | 欧美性野久久久久久久久 |