網(wǎng)站首頁 編程語言 正文
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ù)制的方法,下面將簡(jiǎn)單介紹下這些數(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ù)雜,如果只是簡(jiǎn)單的復(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();
原文鏈接:https://www.cnblogs.com/me115/archive/2011/04/07/2008818.html
相關(guān)推薦
- 2022-11-17 Go語言中常用的基礎(chǔ)方法總結(jié)_Golang
- 2022-06-30 python神經(jīng)網(wǎng)絡(luò)Xception模型復(fù)現(xiàn)詳解_python
- 2022-06-30 Redis三種常用的緩存讀寫策略步驟詳解_Redis
- 2022-06-30 MongoDB排序時(shí)內(nèi)存大小限制與創(chuàng)建索引的注意事項(xiàng)詳解_MongoDB
- 2022-09-16 Pandas數(shù)據(jù)形狀df.shape的實(shí)現(xiàn)_python
- 2022-08-22 Python利用字典和列表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)_python
- 2022-10-07 Android?Gradle?三方依賴管理詳解_Android
- 2023-11-25 消息的訂閱與發(fā)布機(jī)制
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支