(1). 首先添加命名空間system.data.sqlclient;
(2). 定義數(shù)據(jù)庫(kù)連接字符串:
第一種方法:直接把數(shù)據(jù)庫(kù)連接字符串存放在字符串對(duì)象中,如上代碼所示;
第二種方法web:將數(shù)據(jù)庫(kù)連接信息存放在web.config配置文件中,然后通過(guò)使用configurationstringsettings類(lèi)進(jìn)行調(diào)用。來(lái)個(gè)例子說(shuō)明一下:
(a). 首先,在web.config配置文件的部分定義數(shù)據(jù)庫(kù)連接信息:
(b). 在項(xiàng)目文件中,添加對(duì)configuration的引用,在頭部添加using system.configuration。然后定義數(shù)據(jù)庫(kù)連接字符串為:
備注:必須添加對(duì)system.configuration程序集的引用,才能解析上述代碼中使用的configurationmanager類(lèi)。
2. 創(chuàng)建數(shù)據(jù)庫(kù)連接
1)創(chuàng)建connection對(duì)象:
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ě)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的代碼時(shí),因?yàn)槭惯B接打開(kāi)的時(shí)間略長(zhǎng)于需要的時(shí)間,就可能影響其他會(huì)話(huà)。在極端的情況下,不關(guān)閉連接可能會(huì)使其他用戶(hù)無(wú)法進(jìn)入一整組數(shù)據(jù)表,極大地降低應(yīng)用程序的性能。主要有兩種方式可以確保數(shù)據(jù)庫(kù)連接等類(lèi)似的“稀缺”資源在使用完后立即釋放。這兩種方式如下: (1)第一種方式:采用try...catch...finally語(yǔ)句塊 確保在finally中關(guān)閉任何已打開(kāi)的連接。
在給定的方法中可能會(huì)打開(kāi)許多資源,這樣try...catch...finally塊的層次有時(shí)候不容易看清。還有一種方式可以確保資源的關(guān)閉——using語(yǔ)句。 (2)使用using語(yǔ)句塊
無(wú)論塊是如何退出的,using子句都會(huì)確保關(guān)閉數(shù)據(jù)庫(kù)連接。
3. 創(chuàng)建數(shù)據(jù)庫(kù)操作命令:
connection對(duì)象與數(shù)據(jù)源建立連接后,使用command對(duì)象對(duì)數(shù)據(jù)源執(zhí)行查詢(xún)、插入、修改和刪除等操作。
(1) 創(chuàng)建sql數(shù)據(jù)庫(kù)操作命令: sqlquery查詢(xún)語(yǔ)句具體規(guī)則請(qǐng)?jiān)斠?jiàn)我的系列文章:【讀書(shū)筆記】sql server查詢(xún)語(yǔ)句_鄧智容 (2) 創(chuàng)建command對(duì)象:
(a). 方法一:
(b). 方法二:
備注: 1). sql查詢(xún)語(yǔ)句若含有c#程序的變量并以字符串形式連接,則應(yīng)注意數(shù)據(jù)為非數(shù)字的變量應(yīng)用單引號(hào)括起來(lái); 2). 在sql查詢(xún)語(yǔ)句中使用參數(shù)化查詢(xún)語(yǔ)句的話(huà),譬如:
當(dāng)需要給該參數(shù)賦值時(shí),可以使用command對(duì)象建立參數(shù)對(duì)象,然后再賦值:
備注: 在.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ù)類(lèi)型進(jìn)行判斷,獲取對(duì)應(yīng)的數(shù)據(jù)庫(kù)類(lèi)型。 因此該方法在運(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類(lèi)提供了下述可執(zhí)行的命令: (1) executenonquery() —— 執(zhí)行命令,但不返回任何結(jié)果。一般用于update、insert或delete語(yǔ)句中,其中唯一的返回值是受影響的記錄個(gè)數(shù)。但如果調(diào)用帶有輸出參數(shù)的存儲(chǔ)過(guò)程,該方法就有返回值。 (2) executereader() —— 執(zhí)行命令,返回一個(gè)類(lèi)型化的idatareader。是從數(shù)據(jù)源中選擇某些數(shù)據(jù)的最簡(jiǎn)單快捷的方法。 (3) executescalar() —— 執(zhí)行命令,返回結(jié)果集中的第一行第一列的值。
5. 對(duì)數(shù)據(jù)庫(kù)操作完畢后關(guān)閉數(shù)據(jù)庫(kù)連接:
三. 離線(xiàn)數(shù)據(jù)庫(kù)訪(fǎng)問(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ì)象訪(fǎng)問(wèn)數(shù)據(jù)源后,ado.net會(huì)自動(dòng)離線(xiàn),在內(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)行離線(xiàn)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的操作步驟:
1. 創(chuàng)建dataadapter、datatable對(duì)象(使用的是sql server數(shù)據(jù)庫(kù))
2. 將數(shù)據(jù)填充到datatable對(duì)象
3. 對(duì)datatable中的數(shù)據(jù)進(jìn)行處理 tatatable對(duì)象的屬性和方法有:
名稱(chēng) 屬性/方法 說(shuō)明
rows.add() 方法 插入新數(shù)據(jù)行
rows[n].delete() 方法 刪除第n行的記錄
rows.count 屬性 獲取行數(shù)
rows[i][columnname] 屬性 獲取第i行、列名為columnname的值
rows[i][j] 屬性 獲取第i行、第j列的值
還有一種數(shù)據(jù)查詢(xún)技術(shù):linq。下回再討論。
通過(guò)以上對(duì)ado.net數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)技術(shù)的介紹,希望對(duì)大家有所幫助。