基于C#.NET的Access數(shù)據(jù)庫(kù)創(chuàng)建與訪問(wèn)_第1頁(yè)
基于C#.NET的Access數(shù)據(jù)庫(kù)創(chuàng)建與訪問(wèn)_第2頁(yè)
基于C#.NET的Access數(shù)據(jù)庫(kù)創(chuàng)建與訪問(wèn)_第3頁(yè)
基于C#.NET的Access數(shù)據(jù)庫(kù)創(chuàng)建與訪問(wèn)_第4頁(yè)
基于C#.NET的Access數(shù)據(jù)庫(kù)創(chuàng)建與訪問(wèn)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(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、基于C#.NET的Access數(shù)據(jù)庫(kù)創(chuàng)建與訪問(wèn) 時(shí)間: 2011-04-18 來(lái)源: 論文在線摘要:C#是用于.NET開(kāi)發(fā)的一種語(yǔ)言,并且是唯一為.NET Framework設(shè)計(jì)的語(yǔ)言,ADO是微軟極力推薦使用的最新的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),Access數(shù)據(jù)庫(kù)是用戶通常選擇的方便易用的數(shù)據(jù)庫(kù),具有廣泛的應(yīng)用基礎(chǔ)。關(guān)鍵詞:C#;Access數(shù)據(jù)庫(kù);ADO;ADOX一、引言在程序開(kāi)發(fā)過(guò)程中,有時(shí)需要面對(duì)這樣一個(gè)問(wèn)題:如何讓用戶在程序運(yùn)行過(guò)程中動(dòng)態(tài)地建立自己所需的數(shù)據(jù)庫(kù)和表以提高程序的靈活性呢?在程序運(yùn)行過(guò)程中建立自己所需的數(shù)據(jù)庫(kù)和表,其本質(zhì)就是用代碼(或者說(shuō)通過(guò)編程)來(lái)建立數(shù)據(jù)庫(kù)和表。眾所周知,在Foxp

2、ro或ASP編程中,這是很容易的一件事件。那么在C#.NET數(shù)據(jù)庫(kù)編程中又是怎樣來(lái)操作的呢?如果使用DAO(數(shù)據(jù)訪問(wèn)對(duì)象)作為數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),在微軟的MFC類庫(kù)中提供了相關(guān)的DAO類(CDaoDatabase類和CDaoTableDef類),通過(guò)定義這些類的對(duì)象并調(diào)用相應(yīng)的成員函數(shù)就可以實(shí)現(xiàn)Access數(shù)據(jù)庫(kù)和表的動(dòng)態(tài)創(chuàng)建。但是,使用DAO數(shù)據(jù)庫(kù)接口相當(dāng)麻煩,要用到很多API,而ADO(ActiveX數(shù)據(jù)對(duì)象)是微軟極力推薦使用的最新的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),它已經(jīng)成為目前數(shù)據(jù)庫(kù)開(kāi)發(fā)的主流。因此,針對(duì)ADO數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),如何實(shí)現(xiàn)數(shù)據(jù)庫(kù)和表的創(chuàng)建,就成為編程人員較為關(guān)心的一項(xiàng)技術(shù),將給出利用C#.NE

3、T創(chuàng)建Access數(shù)據(jù)庫(kù)并進(jìn)行數(shù)據(jù)訪問(wèn)的方法。二、ADO創(chuàng)建數(shù)據(jù)庫(kù)技術(shù)ADO.NET的名稱起源于ADO(ActiveX Data Objects),這是一個(gè)廣泛的類組,ADO.NET是一組向.NET程序員公開(kāi)數(shù)據(jù)訪問(wèn)服務(wù)的類。ADO.NET為創(chuàng)建分布式數(shù)據(jù)共享應(yīng)用程序提供了一組豐富的組件。它提供了對(duì)關(guān)系數(shù)據(jù)、XML和應(yīng)用程序數(shù)據(jù)的訪問(wèn),因此是.NET Framework中不可缺少的一部分。ADO.NET是用于數(shù)據(jù)訪問(wèn)的.NET Framework API,它提供的強(qiáng)大功能和易用性是以前的數(shù)據(jù)訪問(wèn)解決方案所無(wú)法匹敵的。ADOX是ADO Extensions for Data Definition

4、 Languageand Security,是微軟對(duì)ADO技術(shù)的擴(kuò)展,使用它可以操作數(shù)據(jù)庫(kù)的結(jié)構(gòu)。ADOX是對(duì)ADO對(duì)象和編程模型的擴(kuò)展,它將ADO擴(kuò)展為包括創(chuàng)建、修改和刪除模式對(duì)象,如表格和過(guò)程。它是一個(gè)COM組件,估計(jì)以后在ADO.NET中會(huì)增加ADOX的一些功能。在Visual C#.NET中,使用ADO開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序時(shí),我們要引用對(duì)象庫(kù)“Microsoft ActiveX Data Objects 2.8 Library”,簡(jiǎn)稱為ADO,它是C#.NET數(shù)據(jù)庫(kù)最核心的對(duì)象群,也是C#.NET數(shù)據(jù)庫(kù)開(kāi)發(fā)人員經(jīng)常所引用的對(duì)象庫(kù),在VisualStudio 2005中可以看到它的各種版本

5、,從2.0版到2.8版都有,很多人對(duì)它已經(jīng)很熟悉,在此不再詳細(xì)介紹。如果要在程序運(yùn)行過(guò)程中創(chuàng)建數(shù)據(jù)庫(kù)和表,還要引用對(duì)象庫(kù)“MicrosoftADO Ext.2.8 for DDL and Security”,簡(jiǎn)稱為ADOX。ADOX常用方法有:Append(包括Columns、Groups、Indexes、Keys、Procedures、Tables、Users、Views)、Create(創(chuàng)建新的目錄)、Delete(刪除集合中的對(duì)象)、Refresh(更新集合中的對(duì)象)等等。三、數(shù)據(jù)庫(kù)訪問(wèn)類和對(duì)象總的來(lái)說(shuō),可以把ADO.NET用于數(shù)據(jù)庫(kù)訪問(wèn)的類分為.NET數(shù)據(jù)提供者對(duì)象和數(shù)據(jù)庫(kù)用戶對(duì)象。3

6、.1 提供者對(duì)象.NET框架包括了4種數(shù)據(jù)提供者,SQL Server.NET提供者、Oracle.NET提供者、OLEDB.NET提供者、ODBC.NET提供者,分別用于不同數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)。對(duì)于每種數(shù)據(jù)提供者,包括了如下對(duì)象。(1)數(shù)據(jù)庫(kù)連接對(duì)象(Connection)數(shù)據(jù)庫(kù)連接對(duì)象是一個(gè)與數(shù)據(jù)庫(kù)進(jìn)行連接的對(duì)象,包含著與數(shù)據(jù)源創(chuàng)建連接的信息。用于SQL Server.NET提供者的數(shù)據(jù)庫(kù)連接對(duì)象是SqlConnection,用于Oracle.NET提供者的數(shù)據(jù)庫(kù)連接對(duì)象就是OracleConnection,用于OLEDB.NET提供者的數(shù)據(jù)庫(kù)連接對(duì)象就是OleDbConnection,用于ODB

7、C.NET提供者的數(shù)據(jù)庫(kù)連接對(duì)象是OdbcConnection。(2)數(shù)據(jù)庫(kù)命令對(duì)象(Command)可以使用此對(duì)象向數(shù)據(jù)源發(fā)出命令,對(duì)于不同的數(shù)據(jù)提供者,該對(duì)象的名稱也不同,用于OLEDB.NET提供者的命令對(duì)象是OleDbCommand。(3)命令構(gòu)造對(duì)象(CommandBuilde)此對(duì)象用于構(gòu)建SQL命令,在基于單一表查詢的對(duì)象中進(jìn)行數(shù)據(jù)修改,用于OLEDB.NET提供者的命令對(duì)象OleDbCommandBuilder。(4)數(shù)據(jù)讀取對(duì)象(DataReade)這是一個(gè)快速而易用的對(duì)象,可以從數(shù)據(jù)源中讀取僅能前向和只讀的數(shù)據(jù)流。對(duì)于簡(jiǎn)單的讀取數(shù)據(jù)來(lái)說(shuō),此對(duì)象的性能最好。用于OLEDB.N

8、ET提供者的數(shù)據(jù)讀取對(duì)象是OleDbDataReader。(5)數(shù)據(jù)適配器對(duì)象(DataAdapte)這是一個(gè)通用的類,可以執(zhí)行針對(duì)數(shù)據(jù)源的各種操作,包括更新變動(dòng)的數(shù)據(jù),填充DataSet對(duì)象,該對(duì)象取得數(shù)據(jù)并且在數(shù)據(jù)與數(shù)據(jù)集之間建立一座橋梁。用于OLEDB.NET提供者的數(shù)據(jù)讀取對(duì)象是OleDbDataAdapter。3.2 用戶對(duì)象數(shù)據(jù)庫(kù)用戶對(duì)象用于定義ADO.NET的斷開(kāi)的、客戶端的對(duì)象,它們與.NET數(shù)據(jù)提供者不相關(guān),存在于System.Data名稱空間中。(1)數(shù)據(jù)集對(duì)象(DataSe)數(shù)據(jù)集是數(shù)據(jù)的內(nèi)存駐留形式,此對(duì)象表示一組相關(guān)表,在應(yīng)用程序中這些表作為一個(gè)單元來(lái)引用。有了此對(duì)象

9、,就可以快速?gòu)拿總€(gè)表中獲取所需要的數(shù)據(jù),當(dāng)與服務(wù)器斷開(kāi)時(shí)檢查并修改數(shù)據(jù),然后在另一個(gè)操作中使用這些修改的數(shù)據(jù)更修服務(wù)器。(2)數(shù)據(jù)表對(duì)象(DataTable)數(shù)據(jù)表對(duì)象代表數(shù)據(jù)集中的一個(gè)表,此對(duì)象允許訪問(wèn)其中的行與列,即DataColumn對(duì)象和DataRow對(duì)象。(3)數(shù)據(jù)關(guān)系對(duì)象(DataRelation)數(shù)據(jù)關(guān)系對(duì)象代表通過(guò)共享列而發(fā)生關(guān)系的兩個(gè)表之間的關(guān)系。四、應(yīng)用實(shí)例4.1 設(shè)計(jì)思路本實(shí)例將開(kāi)發(fā)一個(gè)數(shù)據(jù)格式轉(zhuǎn)換軟件,讀取文本文件內(nèi)容到Access數(shù)據(jù)庫(kù)。文本內(nèi)容包括多行3列用逗號(hào)分開(kāi)的數(shù)據(jù),分別代表點(diǎn)號(hào)名稱、X和Y坐標(biāo)。其中關(guān)鍵是基于C#.NET利用ADO技術(shù)讓用戶在程序運(yùn)行過(guò)程中建

10、立數(shù)據(jù)庫(kù)和表,逐行讀取文本數(shù)據(jù),并寫入到用戶自己建立的Access數(shù)據(jù)庫(kù)表格中。訪問(wèn)數(shù)據(jù)庫(kù)時(shí),ADO.NET提供兩種方式,一種是要持續(xù)保持連接的,最明顯的特征就是用到了DataReader這個(gè)對(duì)象來(lái)訪問(wèn)數(shù)據(jù);另一種是不需要持續(xù)保持連接的,這個(gè)時(shí)候要在本地創(chuàng)建一個(gè)數(shù)據(jù)接收對(duì)象,需要利用DataSet訪問(wèn)數(shù)據(jù)。以下核心代碼將分別介紹這兩種數(shù)據(jù)訪問(wèn)方法。4.2 核心代碼(1)創(chuàng)建Access數(shù)據(jù)庫(kù)和表ADOX.Catalog catalog=new Catalog();catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=

11、d:/test.mdb;Jet OLEDB:Engine Type=5");ADODB.Connection cn=new ADODB.Connection();cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:/test.mdb",null,null,-1);catalog.ActiveConnection=cn;ADOX.Table table=new ADOX.Table();table.Name="Coordinates"ADOX.Column column=new ADOX.

12、Column();column.ParentCatalog=catalog;table.Columns.Append("Name",ADOX.DataTypeEnum.adVarWChar,10);table.Columns.Append("X",ADOX.DataTypeEnum.adDouble,20);table.Columns.Append("Y",ADOX.DataTypeEnum.adDouble,20);catalog.Tables.Append(table);cn.Close();(2)讀取文本數(shù)據(jù)FileStream

13、 fs=new FileStream“(d:/point.txt”,FileMode.Open);StreamReader sr=new StreamReader(fs);string strLine=sr.ReadLine();(3)訪問(wèn)Access數(shù)據(jù)庫(kù)并寫入數(shù)據(jù)OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/test.mdb”);/創(chuàng)建連接數(shù)據(jù)庫(kù)的對(duì)象conn.Open();/打開(kāi)方法一:創(chuàng)建有持續(xù)連接的讀取數(shù)據(jù)的對(duì)象while(strLine!=

14、null)stringline=strLine.Split(',');OleDbCommand cmd=new OleDbCommand("Insert IntoCoordinates(Name,X,Y)values('"+line0+"','"+line1+"','"+line2+"')",conn);/創(chuàng)建執(zhí)行SQL語(yǔ)句的命令對(duì)象cmd.CommandType=Comm

15、andType.Text;/指定命令的類型OleDbDataReader reader=cmd.ExecuteReader();/創(chuàng)建有持續(xù)連接的讀取數(shù)據(jù)的對(duì)象strLine=sr.ReadLine();/讀取下一行sr.Close();conn.Close();方法二:創(chuàng)建無(wú)持續(xù)連接的讀取數(shù)據(jù)的對(duì)象DataSet thisDataset=new DataSet();/創(chuàng)建無(wú)持續(xù)連接的讀取數(shù)據(jù)的對(duì)象OleDbDataAdapter thisAdapter=new OleDbDataAdapter("select Name,X,Y from Coordinates",conn

16、);/把DataSet和具體數(shù)據(jù)庫(kù)聯(lián)系起來(lái)的對(duì)象OleDbCommandBuilder thisBuilder=new OleDbCommandBuilder(thisAdapter);thisAdapter.Fill(thisDataset,"Coors");while(strLine!=null)stringstrArray=strLine.Split(',');DataRow thisRow=thisDataset.Tables"Coors".NewRow();thisRow"Name"=st

17、rArray0;thisRow"X"=strArray1;thisRow"Y"=strArray2;thisDataset.Tables"Coors".Rows.Add(thisRow);thisAdapter.Update(thisDataset,"Coors");strLine=sr.ReadLine();sr.Close();conn.Close();4.3 數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)比較用持續(xù)連接方式訪問(wèn)數(shù)據(jù)庫(kù)的好處是DataReader的讀取效率非常快,是DataSet的幾倍。但它的劣勢(shì)也很明顯,一是持續(xù)保持?jǐn)?shù)據(jù)庫(kù)連接,必然要搶占數(shù)據(jù)庫(kù)的資源,如果一個(gè)數(shù)據(jù)庫(kù)連接有上限限制,這就非常糟糕了。另一方面DataReader雖然效率高,但只讀向前,很不靈活。而非持續(xù)連接方式的好處是數(shù)據(jù)讀取靈活,操作方便,而且不占用數(shù)據(jù)庫(kù)資源,還可以靈活

溫馨提示

  • 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)論