基于C#.NET的Access數(shù)據(jù)庫創(chuàng)建與訪問_第1頁
基于C#.NET的Access數(shù)據(jù)庫創(chuàng)建與訪問_第2頁
基于C#.NET的Access數(shù)據(jù)庫創(chuàng)建與訪問_第3頁
基于C#.NET的Access數(shù)據(jù)庫創(chuàng)建與訪問_第4頁
基于C#.NET的Access數(shù)據(jù)庫創(chuàng)建與訪問_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

10、立數(shù)據(jù)庫和表,逐行讀取文本數(shù)據(jù),并寫入到用戶自己建立的Access數(shù)據(jù)庫表格中。訪問數(shù)據(jù)庫時,ADO.NET提供兩種方式,一種是要持續(xù)保持連接的,最明顯的特征就是用到了DataReader這個對象來訪問數(shù)據(jù);另一種是不需要持續(xù)保持連接的,這個時候要在本地創(chuàng)建一個數(shù)據(jù)接收對象,需要利用DataSet訪問數(shù)據(jù)。以下核心代碼將分別介紹這兩種數(shù)據(jù)訪問方法。4.2 核心代碼(1)創(chuàng)建Access數(shù)據(jù)庫和表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)訪問Access數(shù)據(jù)庫并寫入數(shù)據(jù)OleDbConnection conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:/test.mdb”);/創(chuàng)建連接數(shù)據(jù)庫的對象conn.Open();/打開方法一:創(chuàng)建有持續(xù)連接的讀取數(shù)據(jù)的對象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語句的命令對象cmd.CommandType=Comm

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

16、);/把DataSet和具體數(shù)據(jù)庫聯(lián)系起來的對象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ù)庫訪問技術(shù)比較用持續(xù)連接方式訪問數(shù)據(jù)庫的好處是DataReader的讀取效率非???,是DataSet的幾倍。但它的劣勢也很明顯,一是持續(xù)保持數(shù)據(jù)庫連接,必然要搶占數(shù)據(jù)庫的資源,如果一個數(shù)據(jù)庫連接有上限限制,這就非常糟糕了。另一方面DataReader雖然效率高,但只讀向前,很不靈活。而非持續(xù)連接方式的好處是數(shù)據(jù)讀取靈活,操作方便,而且不占用數(shù)據(jù)庫資源,還可以靈活

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論