1. 程式人生 > >Access資料庫教程_如何進行C#連線Access資料庫的細節操作?

Access資料庫教程_如何進行C#連線Access資料庫的細節操作?

許多學者總會面對於資料庫的知識,以下的例子講述到Access資料庫說明,用C#的DataSet類訪問資料庫的一些操作方法。


操作涉及的主要C#類有:
DataSet:對應資料庫表的一個集合,實際上是資料庫表在記憶體中的一個快取
DataTable:對應資料庫表,是資料庫錶行的集合
DataRow:對應資料庫錶行
OleDbConnection:建立資料庫連線
OleDbDataAdapter:由資料庫生成DataSet,並負責DataSet與資料庫的同步
OleDbCommandBuilder:生成更新資料庫所需的指令www.kmxxfk.com

DataSet、DataTable、DataRow用於資料在快取中的操作,這上面的操作只有更新到資料庫中,修改結果才會被永久儲存。OleDbConnection 是用OLEDB方法連線資料庫所必需的。OleDbDataAdapter和OleDbCommandBuilder用來生成DataSet,完成資料庫更新。與OleDbDataAdapter和OleDbCommandBuilder相對應,SqlDataAdapter和SqlCommandBuilder也可以完成用SQL語言為指令的資料庫更新。


假設在D:盤建立了Access資料庫,其路徑為d:\\0DBAcs\\account.mdb,資料庫中有一張名為kaizhi的資料庫表。表結構如下:
表名;Kaizhi
欄位Field Name型別說明
1開支IDkzID長整型自動編號
2開支人Kzren文字50字元
3開支專案名kzname文字50字元
4日期riqi日期/時間99-99-99;0掩碼
5開支說明shuoming文字225字元
6總金額zonge單精度小數點任意;這項開支的總花費

8單價Danjia單精度小數點任意

表建好之後:(1)對錶中新增新資料(2)查詢表中的某個欄位。為了實現這兩項功能,以下幾個問題要考慮:
1準備工作
宣告必須的公共變數
建立與資料庫的連線,建立DataSet物件

2新增記錄
在DataSet物件上新增記錄
同步DataSet物件物件與資料庫中的資料,這一點很重要,很多人忘記了資料進行同步,結果往往是新增、修改的資料不能儲存到資料庫中。
3查詢資料庫表中某記錄的某欄位;

我們可以將上述功能用一個類DataOper實現,下面是程式設計的主要活動。
宣告要用的C#系統類
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

宣告DataOper類中的公共變數

private string DBlocation;
private OleDbConnection dbconn; //資料庫連線
private OleDbDataAdapter da;

建立與資料庫的連線,這裡採用了OLEDB方法:
dbconn = new OleDbConnection(@"provider=microsoft.jet.oledb.4.0; Data Source=d:\\0DBAcs\\account.mdb");
dbconn.Open();

建立DataSet物件
da = new OleDbDataAdapter(@"select * from kaizhi", dbconn); //引用資料庫連線dbconn並依據SQL語句"select * from kaizhi"建立OleDbDataAdapter物件da
DataSet ds = new DataSet(); //建立DataSet物件
da.Fill(ds); //用OleDbDataAdapter物件da填充、更新剛建立的DataSet物件

新增記錄並更新資料庫
OleDbCommandBuilder cb = new OleDbCommandBuilder(da); // 建立OleDbCommandBuilder物件cb用於更新OleDbDataAdapter物件da的Insert、Delete、Update指令
da.UpdateCommand = cb.GetUpdateCommand(); //更新OleDbDataAdapter物件da的指令
設計人員可以編寫自己的更新指令,也可以象上面所寫的那樣用系統預設的指令。但不管怎樣,上面的語句不能缺少,否則程式在執行中會丟擲異常System.InvalidOperationException,並提示:Update requires a valid InsertCommand when passed DataRow collection with new rows.


DataRow drx = ds.Tables[0].NewRow(); //建立一條新記錄行

drx["kzren"] = "kzren";
drx["kzname"]="kzname";
drx["riqi"]=2008-10-11;
drx["shuoming"]="shuoming";
drx["zonge"] = 12;
drx["shuliang"] = 3;
drx["danjia"] = 4;
ds.Tables[0].Rows.Add(drx); //在表中追加記錄
da.Update(ds); //更新資料庫

要查詢引用某記錄的某欄位,直接按如下的方法引用就可以了。
String kx=ds.Tables[0].Rows[0]["kzren"].ToString()



連線access
首先看一個例子程式碼片斷:

--------------------------------------------------------------------------------
using system.data;
using system.data.oledb;
......
string strconnection="provider=microsoft.jet.oledb.4.0;";
[email protected]"data source=c:\\begas.Net\\northwind.mdb";
oledbconnection objconnection=new oledbconnection(strconnection);
......
objconnection.open();
objconnection.close();
......
--------------------------------------------------------------------------------
解釋:
 連線access資料庫需要匯入額外的名稱空間,所以有了最前面的兩條using命令,這是必不可少的!
 strconnection這個變數裡存放的是連線資料庫所需要的連線字串,他指定了要使用的資料提供者和要使用的資料來源.
 "provider=microsoft.jet.oledb.4.0;"是指資料提供者,這裡使用的是microsoft jet引擎,也就是access中的資料引擎,ASP.net就是靠這個和access的資料庫連線的.
 "data source=c:\\begaspnet\\northwind.mdb"是指明資料來源的位置,他的標準形式是"data source=mydrive:mypath\\myfile.mdb".
ps:
 1."+="後面的"@"符號是防止將後面字串中的"\\"解析為轉義字元.
 2.如果要連線的資料庫檔案和當前檔案在同一個目錄下,還可以使用如下的方法連線:
  strconnection+="data source=";
  strconnection+=mappath("northwind.mdb");
  這樣就可以省得你寫一大堆東西了!
 3.要注意連線字串中的引數之間要用分號來分隔.
 "oledbconnection objconnection=new oledbconnection(strconnection);"這一句是利用定義好的連線字串來建立了一個連結物件,以後對資料庫的操作我們都要和這個物件打交道.
 "objconnection.open();"這用來開啟連線.至此,與access資料庫的連線完成.其餘操作(插入,刪除...)請參閱相關書籍
連線SQL Server
例子程式碼片斷:
程式程式碼:

--------------------------------------------------------------------------------
using system.data;
using system.data.sqlclient;
...
string strconnection="user id=sa;passWord=;";
strconnection+="initial catalog=northwind;server=yoursqlserver;";
strconnection+="connect timeout=30";
sqlconnection objconnection=new sqlconnection(strconnection);
...
objconnection.open();
objconnection.close();
...
--------------------------------------------------------------------------------
解釋:
連線sql server資料庫的機制與連線access的機制沒有什麼太大的區別,只是改變了connection物件和連線字串中的不同引數.
首先,連線sql server使用的名稱空間不是"system.data.oledb",而是"system.data.sqlclient".
其次就是他的連線字串了,我們一個一個引數來介紹(注意:引數間用分號分隔):
 "user id=sa":連線資料庫的驗證使用者名稱為sa.他還有一個別名"uid",所以這句我們還可以寫成"uid=sa".
 "password=":連線資料庫的驗證密碼為空.他的別名為"pwd",所以我們可以寫為"pwd=".
 這裡注意,你的sql server必須已經設定了需要使用者名稱和密碼來登入,否則不能用這樣的方式來登入.如果你的sql server設定為Windows登入,那麼在這裡就不需要使用"user id"和"password"這樣的方式來登入,而需要使用"trusted_connection=sspi"來進行登入.
 "initial catalog=northwind":使用的資料來源為"northwind"這個資料庫.他的別名為"database",本句可以寫成"database=northwind".
 "server=yoursqlserver":使用名為"yoursqlserver"的伺服器.他的別名為"data source","address","addr".如果使用的是本地資料庫且定義了例項名,則可以寫為"server=(local)\\例項名";如果是遠端伺服器,則將"(local)"替換為遠端伺服器的名稱或ip地址.
 "connect timeout=30":連線超時時間為30秒.
 在這裡,建立連線物件用的建構函式為:sqlconnection.
 其餘的就和access沒有什麼區別了!
********************************************************************************************************************
用c#訪問access資料庫


我編寫這個程式的動機是當我希望用c sharp訪問msaccess資料庫的時候我沒有辦法獲得任何資訊和參考材料.網上所能獲得的所有材料都是偏重於sql的,所以我們將分兩步來編寫這個應用程式,第一我們將展示如何連線到msaccess資料庫然後看看它有多複雜.最後,我們就這樣完成了這個程式. 

閒言少序,讓我們開始正題.連線到資料庫的過程與我們早先的ado連線過程相比已經發生了較大的變化.下面的圖表恰當的(我希望如此)oledbconnection--> oledbcommand --> oledbdatareader.現在那些熟悉ado的人很明顯能看出兩者的相似之處但是為了使那些還沒有很好的適應ado的人能夠明白,下面是一些解釋. 

oledbconnection -->代表對資料庫的單一連線,根據底層資料庫的功能它能給你操縱資料庫的能力.有一點必須記住,雖然oledbconnection物件出了作用範圍,它也不會自動被關閉.所以,你將不得不顯示的呼叫這個物件的close()方法. 

oledbcommand -->這是就象我們在ado中使用的一樣的通常的command物件.你可以通過這個物件呼叫sql儲存過程或是sql查詢語句. 

oledbdatareader -->這個類擁有非常大的重要性因為它提供了實際上的對資料庫底層資料集的訪問.當你呼叫oledbcommand的executereader方法的時候它就會被建立,.net beta2 sdk說不要直接建立這個類的物件. 

現在你可以在.net beta 2的文件中看到更多的關於這些主要物件的說明,下面是指出如何在程式中訪問資料庫的原始碼. 

using system; 
using system.data.oledb; 

class oledbtest{ 

public static void main() 

/建立資料庫連線 
oledbconnection aconnection = new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=c:\\\\db1.mdb"); 

/建立command物件並儲存sql查詢語句 
oledbcommand acommand = new oledbcommand("select * from emp_test", aconnection); 
try 

aconnection.open(); 

/建立datareader 物件來連線到表單 
oledbdatareader areader = acommand.executereader(); 
console.writeline("this is the returned data from emp_test table"); 

/迴圈遍歷資料庫 
while(areader.read()) 

console.writeline(areader.getint32(0).tostring()); 


/關閉reader物件 
areader.close(); 

/關閉連線,這很重要 
aconnection.close(); 


/一些通常的異常處理 
catch(oledbexception e) 

console.writeline("error: {0}", e.errors[0].message); 




成功執行這個程式的步驟 
1.用msaccess建立一個名叫db1.mdb的資料庫 
2.建立一個名叫emp_test的表單 
3.使它包含下列資料域 
emp_code int 
emp_name text 
emp_ext text 
4.將上面的程式碼儲存到sample.cs檔案中 
5.確保資料庫位於c:\\並確保mdac2.6或是更新的版本已經被安裝 
6.編譯執行 

現在讓我們來了解一些我們在oledbconnection物件的建構函式看到的東西的一些細節,在這裡你看見諸如"provider="之類的東西.下面是一些和ado.net相容的驅動程式型別. 
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 
你可以選擇其中的任何一個但是他們會需要傳遞不同的引數,例如jet.oledb.需要傳遞mdb檔案的名字而sqloledb需要傳遞使用者名稱和密碼. 

所有這些驅動程式都位於system.data.oledb名稱空間裡,所以你必須包括它,而且它們和oledb provider for odbc不相容,也就是說你不能在VB6.0程式裡使用這些驅動程式來訪問資料庫,所以不要去尋找解釋為什麼要把這些資料庫放在c:\\上的資料了 

當你使用microsoft sql server 7.0 或者更新版本的時候,下面是微軟給出的一些指導: 
推薦使用.net data provider在下列情況中,使用microsoft sql server 7.0 或者更新版本的中間層應用程式,使用microsoft data engine (msde)或icrosoft sql server 7.0 或者更新版本的單層應用程式. 
建議將ole db provider for sql server (sqloledb)和ole db .net data provider一起使用. 
對於microsoft sql server 6.5和更早的版本,你必須同時使用ole db provider for sql server 和 ole db.net data provider. 
推薦使用microsoft sql server 6.5和更早的版本或是oracle的中間層應用程式使用ole db .net data provider. 
對於microsoft sql server 7.0 或者更新版本,推薦sql server .net data provider. 
推薦單層應用程式使用microsoft access資料庫. 
不推薦一箇中間層程式同時使用ole db .net data provider和microsoft access資料庫. 
不再支援ole db provider for odbc (msdasql)

相關推薦

Access資料庫教程_如何進行C#連線Access資料庫細節操作

許多學者總會面對於資料庫的知識,以下的例子講述到Access資料庫說明,用C#的DataSet類訪問資料庫的一些操作方法。操作涉及的主要C#類有:DataSet:對應資料庫表的一個集合,實際上是資料庫表在記憶體中的一個快取DataTable:對應資料庫表,是資料庫錶行的集合

C# 連線ACCESS資料庫程式碼例項

 今天一個網友問到如何在C#中連線access資料庫,經查詢資料以及請教網友sammyLan,終於測試成功,大致過程如下 1、建立一個access資料庫名字為CSharptest.mdb,裡面有一個表person,它有兩個欄位personname(備註:由於name是acce

C#連線access資料庫,無法啟動應用程式。工作組資訊檔案丟失,或是已被其它使用者以獨佔方式開啟。

最近有個任務,寫一個程式,讀取使用者電腦上另外一個公司的mdb資料庫記錄,然後上傳到自己公司的網站。 算是第一次正式做C#專案,遇到了不少問題,第一個就是連線access資料庫的問題: OleDbException: 無法啟動應用程式。工作組資訊檔案丟失,或是已被其它使用者

C#連線access資料庫

using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.O

c#連線Access資料庫及增刪改查作

c#窗體程式對Access資料庫的增刪改查,其他資料庫可類似使用準備工作:窗體:access:版本2003(字尾.mdb,新版access可另存為2003相容版)using:using System; using System.Data; using System.Wind

C++連線access資料庫

使用C++程式語言,連線對Access資料庫進行操作,常用的方法有DAO和ADO兩種方式,本文將介紹採用ADO的方式方位Access資料庫。 先介紹一下ADO,ADO (ActiveX Data Objects) 是一個用於存取資料來源的COM組建。它提供了程式語言和統一資料訪問方式OLE

C#連線MYSQL資料庫進行查詢

之前用MFC開發結果介面太難看被pass了,要求用C#重新來開發>_<,不過終於擺脫VC6.0的蛋疼操作了Y。 先來連線資料庫 (1)用c#連線MYSQL資料庫需要用到mysql-connector-net,這個元件網上查詢就可以下載,安裝直接按

vs2013下c++連線mysql資料庫

 本文使用的是mysql提供的api來進行連線,這樣使用比較方便。 開發環境:mysql 5.6+vs2013+win8.1作業系統 步驟1: 要使用mysql的api,需要mysql安裝目錄下include 和 lib 兩個資料夾的東西,如果你用的是wamp或者php

C#連線SQLServer資料庫

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Dat

Linux下的C#連線Mysql資料庫

今天在嘗試在 Linux 系統下使用C#連線資料庫,發現網上這方面的資訊很少,所以就寫一篇部落格記錄一下。 Linux下這裡使用的是mono。 首先是缺少Mysql.Data.dll這個庫的,所以需要安裝 https://dev.mysql.com/downloads/connector/net/ 安

C#連線Oracle資料庫(直接引用dll使用),查詢資料

    首先,下載Oracle.ManagedDataAccess.dll將其放到自己的專案中,然後引用。程式碼如下:      static void Main(string[] args)     &

C/C++連線MySql資料庫使用總結

本文對如何使用MySql的API連線MySql資料庫,開發環境為VS2008. 一、VS2008工程設定工作 首先,建立一個windows應用程式的工程,將C/C++->前處理器->前處理器定義下的_WINDOWS改為_CONSOLE, 將聯結器->系統->子系統 選擇為控制檯。

C#連線Oracle資料庫通過儲存過程操作資料庫

之前筆者一直用C#連線SQL Server資料庫。近期由於工作需要,需要用C#連線Oracle資料庫,並且要通過儲存過程,來操作資料庫中的資料,實現增、刪、改、查(有分頁功能)功能。並且,為了今後對資料庫擴充套件方便,對現在的程式碼改動最小的情況下,實現資料庫的平穩切換,必須

解決C++連線MySQL資料庫插入和獲取記錄中文字元亂碼問題

字元編碼真是個頭痛的問題,以前一直不放在心上,現在用到了才發現真的麻煩。 花了將近一天的時間終於達到目的。 測試環境VS2015+MYSQL5.5,各種編碼的具體說明就不講了,自行百度。 1、讀取資料亂碼問題: vs專案下,預設編碼Unicode,但我的資料庫預設utf

C#連線MySQL資料庫,並建庫、建表

本文章是建立在已經安裝MySQL資料庫的前提,預設安裝在C:\Program Files (x86)\MySQL,建議在安裝時選中Connector.NET 6.9的安裝,裡面有MySQL與C#連線的動態連結庫。   幫助文件C:\Program Files (x86)\MySQL\Connec

C# 連線 Oracle 資料庫(三種方式:OracleClient、ODBC、OLEDB)

1、OracleClient //基於.NET 2.0,只有2.0中包含OracleClient using System; using System.Collections; using System.ComponentModel; using System.Data;

linux下c++連線mysql資料庫

在Linux下,我們可以通過MySQL提供的C API連線資料庫。 使用C API連線mysql資料庫除了要安裝mysql-client和mysql-server,還需要安裝mysql的開發包mysql-devel。 我的系統是fedora,安裝命令如下:s

C#連線Oracle資料庫的方法(Oracle.DataAccess.Client也叫ODP.net)(重要)

官方下載地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下載地址(ODP.net):http://www.oracle.com/technetwork/topics

C++連線MySQL資料庫(利用API)

一般C/C++與資料庫相連有兩種方法。 利用ODBC,ADO,或者JDBC 用ODBC,ADO,JDBC等這些介面,利用裡面的方法來進行與資料庫的連線,簡化對資料庫的操作,方便對資料庫進行管理。 介面的區別可以參考以下文章 不過注意的是C/C++

c#連線sql資料庫超時問題

最近用c#寫了個視窗程式,其中需要連線sql資料庫,新增app.config配置檔案,內容如下: <?xml version="1.0" encoding="utf-8" ?> <configuration>   <connectionStri