C# DataSet的基本用法  

2007-08-24 17:10:04|  分類: 默認分類 |  標簽: |字號 訂閱

C#  DataSet的基本用法,引用自網(wǎng)上,搞不清楚具體原始來源:

 

首先我們需要打開一個聯(lián)結(jié):

string MyConnString = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=c:/test/test.mdb;";

string strComm = "select * from UserList";

ADOConnection MyConnection = new ADOConnection(MyConnString);

ADODataSetCommand MyComm = new ADODataSetCommand(strComm,MyConnection);

這里我們?yōu)榱酥v解方便,只在dataset存入一個表的內(nèi)容:

DataSet MyDataSet = new DataSet();

MyComm.FillDataSet(MyDataSet,"UserList");

此時我們就獲得了一個擁有UserList表數(shù)據(jù)的DataSet。在講解DataSet之前,我們還需要了解DataSet的結(jié)構(gòu)下面是DataSet的結(jié)構(gòu)樹

DataSet

RelationsCollection

ExtendedProperties

TablesCollection  

DataTables

 

Rows

Columns

其它

由于我們研究的是DataTable,其它的我們暫時不管他們。一個DataSet中包含多個DataTable,一個DataTable又包含有多個Row,這就是我們操作DataSet的基礎(chǔ)啦:)

添加數(shù)據(jù)

添加一數(shù)據(jù),從上面的列表中我們可以看出,其實就是添加一行row,這里我們也來演示一下如何添加一行數(shù)據(jù),我們程序一切以dataset為頂點,呵呵,如果tablescollection,rowscollection下去的話,還有一些煩人的dt.acceptchanges這些方法的調(diào)用,很煩人,還是一次搞定吧。

datarow dr=MyDataSet.Tables["UserList"].NewRow();

dr["UserName"] = "周訊";

dr["ReMark"] = "100";

dr["Comment"] = "漂亮MM";

MyDataSet.Tables["UserList"].Rows.Add(dr);

第一行,我們建立一個新的數(shù)據(jù)行,它用來儲存我們新加入的數(shù)據(jù)。然后我們在這個數(shù)據(jù)行中加入我們需要的數(shù)據(jù)。dr["username"]表明是對username字段進行添加,你可以使用dr[1]來添加信息,但是這需要我們事先知道字段在數(shù)據(jù)表的位置,而且在不知道數(shù)據(jù)表結(jié)構(gòu)的情況很難知道我們添加的數(shù)據(jù)的對應(yīng)情況,所以還是用字段名為好。

       最后我們使用RowsCollection的Add方法,將我們新建這一行加入到數(shù)據(jù)表中。

修改數(shù)據(jù)

知道如何添加數(shù)據(jù)后,修改數(shù)據(jù)也是很簡單的事情了.

MyDataSet.Tables["UserList"].Rows[0]["UserName"]="飛刀大哥";

這樣我們就修改了第一行數(shù)據(jù)中的UserName字段。

刪除數(shù)據(jù)

刪除數(shù)據(jù),主要是使用rowscollection提供的delete方法,看下面的程序也是很簡單的事情啦:)

MyDataSet.Tables["UserList"],Rows[0].Delete();

這一行數(shù)據(jù)就已經(jīng)被刪除了。

恢復(fù)數(shù)據(jù)

有時候我們添加/修改數(shù)據(jù)會出現(xiàn)錯誤,這時候,就需要恢復(fù)原來的數(shù)據(jù)。下面的程序,顯示如何判斷是否有錯誤發(fā)生:

if(MyDataSet.HasErrors)

{

MyDataSet.RejectChanges();

}

首先我們檢查DataSet中是否有錯誤發(fā)生,如果有就使用RejectChanges()方法,恢復(fù)DataSet中的數(shù)據(jù)。注意這里恢復(fù)是在DataSet中所有表以及表中DataRow中的數(shù)據(jù),也就是在此交次操作的數(shù)據(jù)全部恢復(fù)。如果我們只需要恢復(fù)部分內(nèi)容,我們可以使用DataTable或DataRow的RejectChanges(),這里就不詳細講解了,使用方法和DataSet一樣,只是操作的對像不同而已。

探測dataset是否有改動

我們在將dataset送交給數(shù)據(jù)庫去保存去,我們需要看看這個dataset是否已經(jīng)被改動了。如果沒有改動,我們也就沒有必要去修改數(shù)據(jù)庫了。

if(mydataset.haschanges)

{

    //保存

}else{

    //不進行任何操作

}

更新數(shù)據(jù)庫

我們上面的操作,都只是針對dataset的,沒有操作數(shù)據(jù)庫,但是我們的目的還是要將數(shù)據(jù)保存到數(shù)據(jù)中去,所以我們這里就需要調(diào)用datasetcommand的update方法。下面的程序顯示如何將dataset的數(shù)據(jù)交給數(shù)據(jù)庫。mycomm.update(mydataset);

很簡單的一句,呵呵。這里要注意,如果一個DataSet中包含有多個表,而我們只更新一個,那我們就必須寫明更新的數(shù)據(jù)表名:

MyComm.Update(MyDataSet,"UserList");

當(dāng)Update方法被調(diào)用后,DataSetCommand會將數(shù)據(jù)庫中的數(shù)據(jù)與DataSet中的數(shù)據(jù)相比較,對不相同的地方進行更新。