欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中DataSet、DataTable、DataRow數(shù)據(jù)的復(fù)制方法

 更新時(shí)間:2022年07月12日 10:43:48   作者:大CC  
這篇文章介紹了C#中DataSet、DataTable、DataRow數(shù)據(jù)的復(fù)制方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

DataSet 對(duì)象是支持 ADO.NET的斷開式、分布式數(shù)據(jù)方案的核心對(duì)象 ,用途非常廣泛.我們很多時(shí)候需要使用其中的數(shù)據(jù),比如取得一個(gè)DataTable的數(shù)據(jù)或者復(fù)制另一個(gè)DataTabe中的數(shù)據(jù)或者是DataRow的數(shù)據(jù),但是只有DataSet和DataTable的復(fù)制是支持深層復(fù)制的,就是說不僅能復(fù)制元素的結(jié)構(gòu),而且能復(fù)制元素的數(shù)據(jù),而DatatDataRow沒有相關(guān)的復(fù)制的方法,下面將簡單介紹下這些數(shù)據(jù)元素的復(fù)制問題。

DataTable sourceTable;
DataTable objectTable;
DatatDataRow sourceRow;
DatatDataRow objectRow;
DataRow tempRow;
DataSet souceDataSet = new DataSet();

復(fù)制DataSet

  DataSet object = souceDataSet.Copy();//深復(fù)制
  DataSet object = souceDataSet.Clone();//淺復(fù)制,只復(fù)制架構(gòu)

復(fù)制DataTable

  objectTable  = sourceTable .Copy();//深復(fù)制
  objectTable  = sourceTable .Clone();//淺復(fù)制,只復(fù)制架構(gòu)

復(fù)制DataRow

那我們應(yīng)該如何復(fù)制DataRow的數(shù)據(jù)了,下面將著重介紹幾種方法

1、ImportDataRow方法:

public void ImportDataRow( DataRow DataRow);

objectTable = sourceTable.clone();//必須先復(fù)制表的架構(gòu),使具有相同的的列或關(guān)系!
foreach (DataRow oRow in sourceTable)
{
    objectTable.ImportDataRow(oRow);//在objectTable中添加一個(gè)新行,并將sourceRow的值復(fù)制進(jìn)去,要求表的結(jié)構(gòu)一樣!
}

2、自定義復(fù)制

objectTable.Columns.Add ("id");//不需要有一樣的架構(gòu),只復(fù)制自己需要的列!
Object [] myArry = new Object [1];
foreach (DataRow oRow in sourceTable)
{
    tempRow = objectTable.NewRow();//此方法必須調(diào)用!
    myArry[0] = oRow["id"];//如果myArry中沒有源表中的id列的話就會(huì)報(bào)錯(cuò)!
    tempRow.ItemArray = myArry;//ItemArray屬性為Object類型數(shù)組,根據(jù)程序的需要需要可自行復(fù)制多個(gè)列的數(shù)據(jù)!
    objectTable.Rows.Add(tempRow); //此方法必須調(diào)用,否則DataRow中的數(shù)據(jù)將不能顯示!
}

3、LoadDataRow方法:

public DataRow LoadDataRow(Object[] values,bool fAcceptChanges);

Object[] newRow = new Object[3];
// 設(shè)置對(duì)象數(shù)組的值
newRow[0] = "Hello";
newRow[1] = "World";
newRow[2] = "two";
DataRow myRow;
ObjectTable.BeginLoadData();
// 將新行添加到表中
myRow = ObjectTable.LoadDataRow(newRow, true);//標(biāo)志要設(shè)置為true,表示添加新行
ObjectTable.EndLoadData();

該方法比較復(fù)雜,如果只是簡單的復(fù)制現(xiàn)有行的數(shù)據(jù)來添加新行的話建議不要采用,具體用法請(qǐng)參看sdk文擋。

DataRow的復(fù)制

如果直接通過RequirDT.Rows.Add(row),則運(yùn)行時(shí)會(huì)出現(xiàn)"該行已經(jīng)屬于一個(gè)表"的提示錯(cuò)誤!至于其中的原因,通過DataSet和DataTable類比,從通常意義來說應(yīng)該不會(huì)出現(xiàn)錯(cuò)誤提示,但是細(xì)細(xì)想來,我覺得應(yīng)該是由于DataTable的架構(gòu)設(shè)計(jì)所致,借鑒關(guān)系數(shù)據(jù)庫中的關(guān)系表,datacolumn定義了DataTable的整體架構(gòu),而具體的datarow是符合該架構(gòu)的一條記錄罷了!所以具有該架構(gòu)的行只能添加到具有相同架構(gòu)的表中!同時(shí)RequireDT.Rows.Add()實(shí)現(xiàn)捕獲 System.ArgumentException(The row ther belongs to another table or ready belongs to this table.)我想其實(shí)現(xiàn)也限制了不能通過該方法實(shí)現(xiàn)!

鑒于以上

1.ImportRow方法

DataTable RequireDT = SourceDT.Clone();
RequireDT.ImportRow(row);

2.見網(wǎng)上有這樣實(shí)現(xiàn)的

RequireDT.Rows.Add(row.ItemArray)

但是我編寫代碼并不能實(shí)現(xiàn),該函數(shù)的功能是Creates a row using specified values and adds it to the System.Data.DataRowCollection。所以也需要先拷貝源數(shù)據(jù)表的結(jié)構(gòu),方可成功!

3. 以下方法也可以實(shí)現(xiàn),但是也得先復(fù)制表的結(jié)構(gòu)

ObjectTable.BeginLoadData(); 
myRow = ObjectTable.LoadDataRow(newRow, true);
ObjectTable.EndLoadData();

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論