C對(duì)Access數(shù)據(jù)庫(kù)的操作_第1頁(yè)
C對(duì)Access數(shù)據(jù)庫(kù)的操作_第2頁(yè)
C對(duì)Access數(shù)據(jù)庫(kù)的操作_第3頁(yè)
C對(duì)Access數(shù)據(jù)庫(kù)的操作_第4頁(yè)
C對(duì)Access數(shù)據(jù)庫(kù)的操作_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、源碼網(wǎng)資料下載:C#對(duì)Access數(shù)據(jù)庫(kù)的操作 (2008-10-16 17:53:40) 下面以Access數(shù)據(jù)庫(kù)為例說(shuō)明,用C#的DataSet類訪問(wèn)數(shù)據(jù)庫(kù)的一些操作方法。 操作涉及的主要C#類有:DataSet:對(duì)應(yīng)數(shù)據(jù)庫(kù)表的一個(gè)集合,實(shí)際上是數(shù)據(jù)庫(kù)表在內(nèi)存中的一個(gè)緩存DataTable:對(duì)應(yīng)數(shù)據(jù)庫(kù)表,是數(shù)據(jù)庫(kù)表行的集合DataRow:對(duì)應(yīng)數(shù)據(jù)庫(kù)表行OleDbConnection:建立數(shù)據(jù)庫(kù)連接OleDbDataAdapter:由數(shù)據(jù)庫(kù)生成DataSet,并負(fù)責(zé)DataSet與數(shù)據(jù)庫(kù)的同步OleDbCommandBuilder:生成更新數(shù)據(jù)庫(kù)所需的指令 DataSet

2、、DataTable、DataRow用于數(shù)據(jù)在緩存中的操作,這上面的操作只有更新到數(shù)據(jù)庫(kù)中,修改結(jié)果才會(huì)被永久保存。OleDbConnection 是用OLEDB方法連接數(shù)據(jù)庫(kù)所必需的。OleDbDataAdapter和OleDbCommandBuilder用來(lái)生成DataSet,完成數(shù)據(jù)庫(kù)更新。與OleDbDataAdapter和OleDbCommandBuilder相對(duì)應(yīng),SqlDataAdapter和SqlCommandBuilder也可以完成用SQL語(yǔ)言為指令的數(shù)據(jù)庫(kù)更新。 假設(shè)在D:盤創(chuàng)建了Access數(shù)據(jù)庫(kù),其路徑為d:0DBAcsaccount.mdb,數(shù)據(jù)庫(kù)中有一張名

3、為kaizhi的數(shù)據(jù)庫(kù)表。表結(jié)構(gòu)如下:表名;Kaizhi 字段Field Name類型說(shuō)明1開支IDkzID 長(zhǎng)整型自動(dòng)編號(hào)2開支人Kzren文本50字符3開支項(xiàng)目名kzname文本50字符4日期riqi日期/時(shí)間99-99-99;0掩碼5開支說(shuō)明shuoming文本225字符6總金額zonge單精度小數(shù)點(diǎn)任意;這項(xiàng)開支的總花費(fèi)7數(shù)量shuliang長(zhǎng)整型 8單價(jià)Danjia單精度小數(shù)點(diǎn)任意 表建好之后:(1)對(duì)表中添加新數(shù)據(jù)(2)查詢表中的某個(gè)字段。為了實(shí)現(xiàn)這兩項(xiàng)功能,以下幾個(gè)問(wèn)題要考慮:1準(zhǔn)備工作聲明必須的公共變量建立與數(shù)據(jù)庫(kù)的連接,創(chuàng)建DataSe

4、t對(duì)象2添加記錄在DataSet對(duì)象上添加記錄同步DataSet對(duì)象對(duì)象與數(shù)據(jù)庫(kù)中的數(shù)據(jù),這一點(diǎn)很重要,很多人忘記了數(shù)據(jù)進(jìn)行同步,結(jié)果往往是添加、修改的數(shù)據(jù)不能保存到數(shù)據(jù)庫(kù)中。3查詢數(shù)據(jù)庫(kù)表中某記錄的某字段; 我們可以將上述功能用一個(gè)類DataOper實(shí)現(xiàn),下面是程序設(shè)計(jì)的主要活動(dòng)。聲明要用的C#系統(tǒng)類using System;using System.Collections.Generic;using System.Text;using System.IO;using System.Data;using System.Data.OleDb;using System.Data.Sql

5、Client; 聲明DataOper類中的公共變量private string DBlocation;private OleDbConnection dbconn; /數(shù)據(jù)庫(kù)連接private OleDbDataAdapter da; 建立與數(shù)據(jù)庫(kù)的連接,這里采用了OLEDB方法:dbconn = new OleDbConnection("provider=microsoft.jet.oledb.4.0; Data Source=d:0DBAcsaccount.mdb");dbconn.Open(); 創(chuàng)建DataSet對(duì)象da = new O

6、leDbDataAdapter("select * from kaizhi", dbconn); /引用數(shù)據(jù)庫(kù)連接dbconn并依據(jù)SQL語(yǔ)句"select * from kaizhi"創(chuàng)建OleDbDataAdapter對(duì)象daDataSet ds = new DataSet(); /創(chuàng)建DataSet對(duì)象da.Fill(ds); /用OleDbDataAdapter對(duì)象da填充、更新剛創(chuàng)建的DataSet對(duì)象 添加記錄并更新數(shù)據(jù)庫(kù)  OleDbCommandBuilder cb = new OleDbCommandBuilder(

7、da); / 創(chuàng)建OleDbCommandBuilder對(duì)象cb用于更新OleDbDataAdapter對(duì)象da的Insert、Delete、Update指令  da.UpdateCommand = cb.GetUpdateCommand(); /更新OleDbDataAdapter對(duì)象da的指令設(shè)計(jì)人員可以編寫自己的更新指令,也可以象上面所寫的那樣用系統(tǒng)默認(rèn)的指令。但不管怎樣,上面的語(yǔ)句不能缺少,否則程序在運(yùn)行中會(huì)拋出異常System.InvalidOperationException,并提示:Update requires a valid InsertCommand when p

8、assed DataRow collection with new rows.  DataRow drx = ds.Tables0.NewRow(); /創(chuàng)建一條新記錄行             drx"kzren" = "kzren"            drx"kzname"=&qu

9、ot;kzname"            drx"riqi"=2008-10-11;            drx"shuoming"="shuoming"            drx"

10、zonge" = 12;            drx"shuliang" = 3;            drx"danjia" = 4;            ds.Tables0.Rows.Add(drx); /在

11、表中追加記錄            da.Update(ds); /更新數(shù)據(jù)庫(kù) 要查詢引用某記錄的某字段,直接按如下的方法引用就可以了。String kx=ds.Tables0.Rows0"kzren".ToString()連接access首先看一個(gè)例子代碼片斷:程序代碼:-using system.data;using system.data.oledb;.string strconnection="provider=microsoft.jet

12、.oledb.4.0;"strconnection+="data source=c:begaspnetnorthwind.mdb"oledbconnection objconnection=new oledbconnection(strconnection);.objconnection.open();objconnection.close();.-解釋:連接access數(shù)據(jù)庫(kù)需要導(dǎo)入額外的命名空間,所以有了最前面的兩條using命令,這是必不可少的!strconnection這個(gè)變量里存放的是連接數(shù)據(jù)庫(kù)所需要的連接字符串,他指定了要使用的數(shù)據(jù)提供者和要使用的數(shù)據(jù)

13、源."provider=microsoft.jet.oledb.4.0;"是指數(shù)據(jù)提供者,這里使用的是microsoft jet引擎,也就是access中的數(shù)據(jù)引擎,就是靠這個(gè)和access的數(shù)據(jù)庫(kù)連接的."data source=c:begaspnetnorthwind.mdb"是指明數(shù)據(jù)源的位置,他的標(biāo)準(zhǔn)形式是"data source=mydrive:mypathmyfile.mdb".ps:1."+="后面的""符號(hào)是防止將后面字符串中的""解析為轉(zhuǎn)義字符.2.如果要連

14、接的數(shù)據(jù)庫(kù)文件和當(dāng)前文件在同一個(gè)目錄下,還可以使用如下的方法連接:strconnection+="data source="strconnection+=mappath("northwind.mdb");這樣就可以省得你寫一大堆東西了!3.要注意連接字符串中的參數(shù)之間要用分號(hào)來(lái)分隔."oledbconnection objconnection=new oledbconnection(strconnection);"這一句是利用定義好的連接字符串來(lái)建立了一個(gè)鏈接對(duì)象,以后對(duì)數(shù)據(jù)庫(kù)的操作我們都要和這個(gè)對(duì)象打交道."objconn

15、ection.open();"這用來(lái)打開連接.至此,與access數(shù)據(jù)庫(kù)的連接完成.其余操作(插入,刪除.)請(qǐng)參閱相關(guān)書籍連接sql server例子代碼片斷:程序代碼:-using system.data;using system.data.sqlclient;.string strconnection="user id=sa;password=;"strconnection+="initial catalog=northwind;server=yoursqlserver;"strconnection+="connect timeo

16、ut=30"sqlconnection objconnection=new sqlconnection(strconnection);.objconnection.open();objconnection.close();.-解釋:連接sql server數(shù)據(jù)庫(kù)的機(jī)制與連接access的機(jī)制沒(méi)有什么太大的區(qū)別,只是改變了connection對(duì)象和連接字符串中的不同參數(shù).首先,連接sql server使用的命名空間不是"system.data.oledb",而是"system.data.sqlclient".其次就是他的連接字符串了,我們一個(gè)一個(gè)

17、參數(shù)來(lái)介紹(注意:參數(shù)間用分號(hào)分隔):"user id=sa":連接數(shù)據(jù)庫(kù)的驗(yàn)證用戶名為sa.他還有一個(gè)別名"uid",所以這句我們還可以寫成"uid=sa"."password=":連接數(shù)據(jù)庫(kù)的驗(yàn)證密碼為空.他的別名為"pwd",所以我們可以寫為"pwd=".這里注意,你的sql server必須已經(jīng)設(shè)置了需要用戶名和密碼來(lái)登錄,否則不能用這樣的方式來(lái)登錄.如果你的sql server設(shè)置為windows登錄,那么在這里就不需要使用"user id"和&

18、quot;password"這樣的方式來(lái)登錄,而需要使用"trusted_connection=sspi"來(lái)進(jìn)行登錄."initial catalog=northwind":使用的數(shù)據(jù)源為"northwind"這個(gè)數(shù)據(jù)庫(kù).他的別名為"database",本句可以寫成"database=northwind"."server=yoursqlserver":使用名為"yoursqlserver"的服務(wù)器.他的別名為"data source&q

19、uot;,"address","addr".如果使用的是本地?cái)?shù)據(jù)庫(kù)且定義了實(shí)例名,則可以寫為"server=(local)實(shí)例名"如果是遠(yuǎn)程服務(wù)器,則將"(local)"替換為遠(yuǎn)程服務(wù)器的名稱或ip地址."connect timeout=30":連接超時(shí)時(shí)間為30秒.在這里,建立連接對(duì)象用的構(gòu)造函數(shù)為:sqlconnection.其余的就和access沒(méi)有什么區(qū)別了!*用c#訪問(wèn)access數(shù)據(jù)庫(kù)   我編寫這個(gè)程序的動(dòng)機(jī)是當(dāng)我希望用c sharp訪問(wèn)msaccess數(shù)據(jù)庫(kù)的

20、時(shí)候我沒(méi)有辦法獲得任何信息和參考材料.網(wǎng)上所能獲得的所有材料都是偏重于sql的,所以我們將分兩步來(lái)編寫這個(gè)應(yīng)用程序,第一我們將展示如何連接到msaccess數(shù)據(jù)庫(kù)然后看看它有多復(fù)雜.最后,我們就這樣完成了這個(gè)程序.       閑言少序,讓我們開始正題.連接到數(shù)據(jù)庫(kù)的過(guò)程與我們?cè)缦鹊腶do連接過(guò)程相比已經(jīng)發(fā)生了較大的變化.下面的圖表恰當(dāng)?shù)?我希望如此)oledbconnection-> oledbcommand -> oledbdatareader.現(xiàn)在那些熟悉ado的人很明顯能看出兩者的相似之處但是為了使那些還沒(méi)有很好的適應(yīng)ado的人能夠明

21、白,下面是一些解釋.       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ì)象.你可以通過(guò)這個(gè)對(duì)象調(diào)用sql存儲(chǔ)過(guò)程或是sql查詢語(yǔ)句.       oledb

22、datareader ->這個(gè)類擁有非常大的重要性因?yàn)樗峁┝藢?shí)際上的對(duì)數(shù)據(jù)庫(kù)底層數(shù)據(jù)集的訪問(wèn).當(dāng)你調(diào)用oledbcommand的executereader方法的時(shí)候它就會(huì)被創(chuàng)建,.net beta2 sdk說(shuō)不要直接創(chuàng)建這個(gè)類的對(duì)象.       現(xiàn)在你可以在.net beta 2的文檔中看到更多的關(guān)于這些主要對(duì)象的說(shuō)明,下面是指出如何在程序中訪問(wèn)數(shù)據(jù)庫(kù)的源代碼.       using system;    using system.data.oledb;    &

23、#160;  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ǔ)句 

24、0;  oledbcommand acommand = new oledbcommand("select * from emp_test", aconnection);    try       aconnection.open();       /創(chuàng)建datareader 對(duì)象來(lái)連接到表單    oledbdatareader areader = acommand.executereader();    console.wr

25、iteline("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();  

26、     /關(guān)閉連接,這很重要    aconnection.close();          /一些通常的異常處理    catch(oledbexception e)       console.writeline("error: 0", e.errors0.message);              

27、0; 成功運(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)行 &#

28、160;     現(xiàn)在讓我們來(lái)了解一些我們?cè)趏ledbconnection對(duì)象的構(gòu)造函數(shù)看到的東西的一些細(xì)節(jié),在這里你看見諸如"provider="之類的東西.下面是一些和兼容的驅(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需要傳遞用戶

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論