1. 程式人生 > >c# 與 Access資料庫 dataset操作

c# 與 Access資料庫 dataset操作

下面以Access資料庫為例說明,用C#的DataSet類訪問資料庫的一些操作方法。

操作涉及的主要C#類有:

DataSet:對應資料庫表的一個集合,實際上是資料庫表在記憶體中的一個快取

DataTable:對應資料庫表,是資料庫錶行的集合

DataRow:對應資料庫錶行

OleDbConnection:建立資料庫連線

OleDbDataAdapter:由資料庫生成DataSet,並負責DataSet與資料庫的同步

OleDbCommandBuilder:生成更新資料庫所需的指令

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

假設在D:盤建立了Access資料庫,其路徑為d:\0DBAcs\account.mdb,資料庫中有一張名為kaizhi的資料庫表。表結構如下:

表名;Kaizhi

欄位

Field Name

型別

說明

1

開支ID

kzID

長整型

自動編號

2

開支人

Kzren

文字

50字元

3

開支專案名

kzname

文字

50字元

4

日期

riqi

日期/時間

99-99-99;0掩碼

5

開支說明

shuoming

文字

225字元

6

總金額

zonge

單精度

小數點任意;這項開支的總花費

7

數量

shuliang

長整型

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()