國(guó)內(nèi)最大的酷站演示中心!
我編寫這個(gè)程序的動(dòng)機(jī)是當(dāng)我希望用c sharp訪問msaccess數(shù)據(jù)庫(kù)的時(shí)候我沒有辦法獲得任何信息和參考材料.網(wǎng)上所能獲得的所有材料都是偏重于sql的,所以我們將分兩步來編寫這個(gè)應(yīng)用程序,第一我們將展示如何連接到msaccess數(shù)據(jù)庫(kù)然后看看它有多復(fù)雜.最后,我們就這樣完成了這個(gè)程序.
閑言少序,讓我們開始正題.連接到數(shù)據(jù)庫(kù)的過程與我們?cè)缦鹊腶do連接過程相比已經(jīng)發(fā)生了較大的變化.下面的圖表恰當(dāng)?shù)?我希望如此)oledbconnection--> oledbcommand --> oledbdatareader.現(xiàn)在那些熟悉ado的人很明顯能看出兩者的相似之處但是為了使那些還沒有很好的適應(yīng)ado的人能夠明白,下面是一些解釋.
oledbconnection -->代表對(duì)數(shù)據(jù)庫(kù)的單一連接,根據(jù)底層數(shù)據(jù)庫(kù)的功能它能給你操縱數(shù)據(jù)庫(kù)的能力.有一點(diǎn)必須記住,雖然oledbconnection對(duì)象出了作用范圍,它也不會(huì)自動(dòng)被關(guān)閉.所以,你將不得不顯示的調(diào)用這個(gè)對(duì)象的close()方法.
oledbcommand -->這是就象我們?cè)赼do中使用的一樣的通常的command對(duì)象.你可以通過這個(gè)對(duì)象調(diào)用sql存儲(chǔ)過程或是sql查詢語(yǔ)句.
oledbdatareader -->這個(gè)類擁有非常大的重要性因?yàn)樗峁┝藢?shí)際上的對(duì)數(shù)據(jù)庫(kù)底層數(shù)據(jù)集的訪問.當(dāng)你調(diào)用oledbcommand的executereader方法的時(shí)候它就會(huì)被創(chuàng)建,.net beta2 sdk說不要直接創(chuàng)建這個(gè)類的對(duì)象.
現(xiàn)在你可以在.net beta 2的文檔中看到更多的關(guān)于這些主要對(duì)象的說明,下面是指出如何在程序中訪問數(shù)據(jù)庫(kù)的源代碼.
using system;
using system.data.oledb;
class oledbtest{
public static void main()
{
//創(chuàng)建數(shù)據(jù)庫(kù)連接
oledbconnection aconnection = new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=c://db1.mdb");
//創(chuàng)建command對(duì)象并保存sql查詢語(yǔ)句
oledbcommand acommand = new oledbcommand("select * from emp_test", aconnection);
try
{
aconnection.open();
//創(chuàng)建datareader 對(duì)象來連接到表單
oledbdatareader areader = acommand.executereader();
console.writeline("this is the returned data from emp_test table");
//循環(huán)遍歷數(shù)據(jù)庫(kù)
while(areader.read())
{
console.writeline(areader.getint32(0).tostring());
}
//關(guān)閉reader對(duì)象
areader.close();
//關(guān)閉連接,這很重要
aconnection.close();
}
//一些通常的異常處理
catch(oledbexception e)
{
console.writeline("error: {0}", e.errors[0].message);
}
}
}
成功運(yùn)行這個(gè)程序的步驟
1.用msaccess創(chuàng)建一個(gè)名叫db1.mdb的數(shù)據(jù)庫(kù)
2.創(chuàng)建一個(gè)名叫emp_test的表單
3.使它包含下列數(shù)據(jù)域
emp_code int
emp_name text
emp_ext text
4.將上面的代碼保存到sample.cs文件中
5.確保數(shù)據(jù)庫(kù)位于c:/并確保mdac2.6或是更新的版本已經(jīng)被安裝
6.編譯運(yùn)行
現(xiàn)在讓我們來了解一些我們?cè)趏ledbconnection對(duì)象的構(gòu)造函數(shù)看到的東西的一些細(xì)節(jié),在這里你看見諸如"provider="之類的東西.下面是一些和ado.net兼容的驅(qū)動(dòng)程序類型.
sqlolddb --> microsoft ole db provider for sql server,
msdaora --> microsoft ole db provider for oracle,
microsoft.jet.oledb.4.0 --> ole db provider for microsoft jet
你可以選擇其中的任何一個(gè)但是他們會(huì)需要傳遞不同的參數(shù),例如jet.oledb.需要傳遞mdb文件的名字而sqloledb需要傳遞用戶名和密碼.
所有這些驅(qū)動(dòng)程序都位于system.data.oledb命名空間里,所以你必須包括它,而且它們和oledb provider for odbc不兼容,也就是說你不能在vb6.0程序里使用這些驅(qū)動(dòng)程序來訪問數(shù)據(jù)庫(kù),所以不要去尋找解釋為什么要把這些數(shù)據(jù)庫(kù)放在c:/上的資料了
當(dāng)你使用microsoft sql server 7.0 或者更新版本的時(shí)候,下面是微軟給出的一些指導(dǎo):
推薦使用.net data provider在下列情況中,使用microsoft sql server 7.0 或者更新版本的中間層應(yīng)用程序,使用microsoft data engine (msde)或icrosoft sql server 7.0 或者更新版本的單層應(yīng)用程序.
建議將ole db provider for sql server (sqloledb)和ole db .net data provider一起使用.
對(duì)于microsoft sql server 6.5和更早的版本,你必須同時(shí)使用ole db provider for sql server 和 ole db.net data provider.
推薦使用microsoft sql server 6.5和更早的版本或是oracle的中間層應(yīng)用程序使用ole db .net data provider.
對(duì)于microsoft sql server 7.0 或者更新版本,推薦sql server .net data provider.
推薦單層應(yīng)用程序使用microsoft access數(shù)據(jù)庫(kù).
不推薦一個(gè)中間層程序同時(shí)使用ole db .net data provider和microsoft access數(shù)據(jù)庫(kù).
不再支持ole db provider for odbc (msdasql)