




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、源碼網(wǎng)資料下載:C#對Access數(shù)據(jù)庫的操作 (2008-10-16 17:53:40) 下面以Access數(shù)據(jù)庫為例說明,用C#的DataSet類訪問數(shù)據(jù)庫的一些操作方法。 操作涉及的主要C#類有:DataSet:對應(yīng)數(shù)據(jù)庫表的一個集合,實際上是數(shù)據(jù)庫表在內(nèi)存中的一個緩存DataTable:對應(yīng)數(shù)據(jù)庫表,是數(shù)據(jù)庫表行的集合DataRow:對應(yīng)數(shù)據(jù)庫表行OleDbConnection:建立數(shù)據(jù)庫連接OleDbDataAdapter:由數(shù)據(jù)庫生成DataSet,并負(fù)責(zé)DataSet與數(shù)據(jù)庫的同步OleDbCommandBuilder:生成更新數(shù)據(jù)庫所需的指令 DataSet
2、、DataTable、DataRow用于數(shù)據(jù)在緩存中的操作,這上面的操作只有更新到數(shù)據(jù)庫中,修改結(jié)果才會被永久保存。OleDbConnection 是用OLEDB方法連接數(shù)據(jù)庫所必需的。OleDbDataAdapter和OleDbCommandBuilder用來生成DataSet,完成數(shù)據(jù)庫更新。與OleDbDataAdapter和OleDbCommandBuilder相對應(yīng),SqlDataAdapter和SqlCommandBuilder也可以完成用SQL語言為指令的數(shù)據(jù)庫更新。 假設(shè)在D:盤創(chuàng)建了Access數(shù)據(jù)庫,其路徑為d:0DBAcsaccount.mdb,數(shù)據(jù)庫中有一張名
3、為kaizhi的數(shù)據(jù)庫表。表結(jié)構(gòu)如下:表名;Kaizhi 字段Field Name類型說明1開支IDkzID 長整型自動編號2開支人Kzren文本50字符3開支項目名kzname文本50字符4日期riqi日期/時間99-99-99;0掩碼5開支說明shuoming文本225字符6總金額zonge單精度小數(shù)點任意;這項開支的總花費7數(shù)量shuliang長整型 8單價Danjia單精度小數(shù)點任意 表建好之后:(1)對表中添加新數(shù)據(jù)(2)查詢表中的某個字段。為了實現(xiàn)這兩項功能,以下幾個問題要考慮:1準(zhǔn)備工作聲明必須的公共變量建立與數(shù)據(jù)庫的連接,創(chuàng)建DataSe
4、t對象2添加記錄在DataSet對象上添加記錄同步DataSet對象對象與數(shù)據(jù)庫中的數(shù)據(jù),這一點很重要,很多人忘記了數(shù)據(jù)進行同步,結(jié)果往往是添加、修改的數(shù)據(jù)不能保存到數(shù)據(jù)庫中。3查詢數(shù)據(jù)庫表中某記錄的某字段; 我們可以將上述功能用一個類DataOper實現(xiàn),下面是程序設(shè)計的主要活動。聲明要用的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ù)庫連接private OleDbDataAdapter da; 建立與數(shù)據(jù)庫的連接,這里采用了OLEDB方法:dbconn = new OleDbConnection("provider=microsoft.jet.oledb.4.0; Data Source=d:0DBAcsaccount.mdb");dbconn.Open(); 創(chuàng)建DataSet對象da = new O
6、leDbDataAdapter("select * from kaizhi", dbconn); /引用數(shù)據(jù)庫連接dbconn并依據(jù)SQL語句"select * from kaizhi"創(chuàng)建OleDbDataAdapter對象daDataSet ds = new DataSet(); /創(chuàng)建DataSet對象da.Fill(ds); /用OleDbDataAdapter對象da填充、更新剛創(chuàng)建的DataSet對象 添加記錄并更新數(shù)據(jù)庫 OleDbCommandBuilder cb = new OleDbCommandBuilder(
7、da); / 創(chuàng)建OleDbCommandBuilder對象cb用于更新OleDbDataAdapter對象da的Insert、Delete、Update指令 da.UpdateCommand = cb.GetUpdateCommand(); /更新OleDbDataAdapter對象da的指令設(shè)計人員可以編寫自己的更新指令,也可以象上面所寫的那樣用系統(tǒng)默認(rèn)的指令。但不管怎樣,上面的語句不能缺少,否則程序在運行中會拋出異常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ù)庫 要查詢引用某記錄的某字段,直接按如下的方法引用就可以了。String kx=ds.Tables0.Rows0"kzren".ToString()連接access首先看一個例子代碼片斷:程序代碼:-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ù)庫需要導(dǎo)入額外的命名空間,所以有了最前面的兩條using命令,這是必不可少的!strconnection這個變量里存放的是連接數(shù)據(jù)庫所需要的連接字符串,他指定了要使用的數(shù)據(jù)提供者和要使用的數(shù)據(jù)
13、源."provider=microsoft.jet.oledb.4.0;"是指數(shù)據(jù)提供者,這里使用的是microsoft jet引擎,也就是access中的數(shù)據(jù)引擎,就是靠這個和access的數(shù)據(jù)庫連接的."data source=c:begaspnetnorthwind.mdb"是指明數(shù)據(jù)源的位置,他的標(biāo)準(zhǔn)形式是"data source=mydrive:mypathmyfile.mdb".ps:1."+="后面的""符號是防止將后面字符串中的""解析為轉(zhuǎn)義字符.2.如果要連
14、接的數(shù)據(jù)庫文件和當(dāng)前文件在同一個目錄下,還可以使用如下的方法連接:strconnection+="data source="strconnection+=mappath("northwind.mdb");這樣就可以省得你寫一大堆東西了!3.要注意連接字符串中的參數(shù)之間要用分號來分隔."oledbconnection objconnection=new oledbconnection(strconnection);"這一句是利用定義好的連接字符串來建立了一個鏈接對象,以后對數(shù)據(jù)庫的操作我們都要和這個對象打交道."objconn
15、ection.open();"這用來打開連接.至此,與access數(shù)據(jù)庫的連接完成.其余操作(插入,刪除.)請參閱相關(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ù)庫的機制與連接access的機制沒有什么太大的區(qū)別,只是改變了connection對象和連接字符串中的不同參數(shù).首先,連接sql server使用的命名空間不是"system.data.oledb",而是"system.data.sqlclient".其次就是他的連接字符串了,我們一個一個
17、參數(shù)來介紹(注意:參數(shù)間用分號分隔):"user id=sa":連接數(shù)據(jù)庫的驗證用戶名為sa.他還有一個別名"uid",所以這句我們還可以寫成"uid=sa"."password=":連接數(shù)據(jù)庫的驗證密碼為空.他的別名為"pwd",所以我們可以寫為"pwd=".這里注意,你的sql server必須已經(jīng)設(shè)置了需要用戶名和密碼來登錄,否則不能用這樣的方式來登錄.如果你的sql server設(shè)置為windows登錄,那么在這里就不需要使用"user id"和&
18、quot;password"這樣的方式來登錄,而需要使用"trusted_connection=sspi"來進行登錄."initial catalog=northwind":使用的數(shù)據(jù)源為"northwind"這個數(shù)據(jù)庫.他的別名為"database",本句可以寫成"database=northwind"."server=yoursqlserver":使用名為"yoursqlserver"的服務(wù)器.他的別名為"data source&q
19、uot;,"address","addr".如果使用的是本地數(shù)據(jù)庫且定義了實例名,則可以寫為"server=(local)實例名"如果是遠(yuǎn)程服務(wù)器,則將"(local)"替換為遠(yuǎn)程服務(wù)器的名稱或ip地址."connect timeout=30":連接超時時間為30秒.在這里,建立連接對象用的構(gòu)造函數(shù)為:sqlconnection.其余的就和access沒有什么區(qū)別了!*用c#訪問access數(shù)據(jù)庫 我編寫這個程序的動機是當(dāng)我希望用c sharp訪問msaccess數(shù)據(jù)庫的
20、時候我沒有辦法獲得任何信息和參考材料.網(wǎng)上所能獲得的所有材料都是偏重于sql的,所以我們將分兩步來編寫這個應(yīng)用程序,第一我們將展示如何連接到msaccess數(shù)據(jù)庫然后看看它有多復(fù)雜.最后,我們就這樣完成了這個程序. 閑言少序,讓我們開始正題.連接到數(shù)據(jù)庫的過程與我們早先的ado連接過程相比已經(jīng)發(fā)生了較大的變化.下面的圖表恰當(dāng)?shù)?我希望如此)oledbconnection-> oledbcommand -> oledbdatareader.現(xiàn)在那些熟悉ado的人很明顯能看出兩者的相似之處但是為了使那些還沒有很好的適應(yīng)ado的人能夠明
21、白,下面是一些解釋. oledbconnection ->代表對數(shù)據(jù)庫的單一連接,根據(jù)底層數(shù)據(jù)庫的功能它能給你操縱數(shù)據(jù)庫的能力.有一點必須記住,雖然oledbconnection對象出了作用范圍,它也不會自動被關(guān)閉.所以,你將不得不顯示的調(diào)用這個對象的close()方法. oledbcommand ->這是就象我們在ado中使用的一樣的通常的command對象.你可以通過這個對象調(diào)用sql存儲過程或是sql查詢語句. oledb
22、datareader ->這個類擁有非常大的重要性因為它提供了實際上的對數(shù)據(jù)庫底層數(shù)據(jù)集的訪問.當(dāng)你調(diào)用oledbcommand的executereader方法的時候它就會被創(chuàng)建,.net beta2 sdk說不要直接創(chuàng)建這個類的對象. 現(xiàn)在你可以在.net beta 2的文檔中看到更多的關(guān)于這些主要對象的說明,下面是指出如何在程序中訪問數(shù)據(jù)庫的源代碼. using system; using system.data.oledb; &
23、#160; class oledbtest public static void main() /創(chuàng)建數(shù)據(jù)庫連接 oledbconnection aconnection = new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=c:db1.mdb"); /創(chuàng)建command對象并保存sql查詢語句
24、0; oledbcommand acommand = new oledbcommand("select * from emp_test", aconnection); try aconnection.open(); /創(chuàng)建datareader 對象來連接到表單 oledbdatareader areader = acommand.executereader(); console.wr
25、iteline("this is the returned data from emp_test table"); /循環(huán)遍歷數(shù)據(jù)庫 while(areader.read() console.writeline(areader.getint32(0).tostring(); /關(guān)閉reader對象 areader.close();
26、 /關(guān)閉連接,這很重要 aconnection.close(); /一些通常的異常處理 catch(oledbexception e) console.writeline("error: 0", e.errors0.message);
27、0; 成功運行這個程序的步驟 1.用msaccess創(chuàng)建一個名叫db1.mdb的數(shù)據(jù)庫 2.創(chuàng)建一個名叫emp_test的表單 3.使它包含下列數(shù)據(jù)域 emp_code int emp_name text emp_ext text 4.將上面的代碼保存到sample.cs文件中 5.確保數(shù)據(jù)庫位于c:并確保mdac2.6或是更新的版本已經(jīng)被安裝 6.編譯運行
28、160; 現(xiàn)在讓我們來了解一些我們在oledbconnection對象的構(gòu)造函數(shù)看到的東西的一些細(xì)節(jié),在這里你看見諸如"provider="之類的東西.下面是一些和兼容的驅(qū)動程序類型. 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 你可以選擇其中的任何一個但是他們會需要傳遞不同的參數(shù),例如jet.oledb.需要傳遞mdb文件的名字而sqloledb需要傳遞用戶
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 直播違約合同范本
- 科技變革中的研究生學(xué)術(shù)生涯規(guī)劃策略
- 2025年度民間個人擔(dān)保個人教育儲蓄貸款合同
- 二零二五年度化妝品退貨退換貨服務(wù)協(xié)議
- 南寧市事業(yè)單位2025年度實習(xí)崗位聘用合同
- 2025年度牧草種植基地租賃與投資合同書
- 科技產(chǎn)品開發(fā)中的問題導(dǎo)學(xué)模式分析
- 2025年度物流公司專業(yè)司機服務(wù)質(zhì)量保障合作協(xié)議合同
- 衛(wèi)生院聘用合同(2025年度基層衛(wèi)生服務(wù)體系建設(shè))
- 二零二五年度校方責(zé)任險賠償協(xié)議書:校園食品安全事故責(zé)任賠償合同
- 絕緣電阻測試儀安全操作規(guī)程
- DB6101T 197-2022 藤蔓類尾菜堆肥技術(shù)規(guī)程
- 《生僻字》歌詞(帶拼音解釋)
- 西藏房屋建筑工程竣工材料全套表格
- 品管圈基本知識
- 物業(yè)項目保潔服務(wù)質(zhì)量保證及安全保障措施(標(biāo)書專用)參考借鑒范本
- 量子力學(xué)英文課件格里菲斯Chapter4
- 人教版小學(xué)四年級數(shù)學(xué)下冊電子教案 全冊
- 氧化鋁行業(yè)規(guī)程試題資料
- 鍋爐節(jié)能管理制度
- 市政工程標(biāo)準(zhǔn)施工組織設(shè)計方案
評論
0/150
提交評論