網站首頁 編程語言 正文
DataSet 對象是支持 ADO.NET的斷開式、分布式數據方案的核心對象 ,用途非常廣泛.我們很多時候需要使用其中的數據,比如取得一個DataTable的數據或者復制另一個DataTabe中的數據或者是DataRow的數據,但是只有DataSet和DataTable的復制是支持深層復制的,就是說不僅能復制元素的結構,而且能復制元素的數據,而DatatDataRow沒有相關的復制的方法,下面將簡單介紹下這些數據元素的復制問題。
DataTable sourceTable;
DataTable objectTable;
DatatDataRow sourceRow;
DatatDataRow objectRow;
DataRow tempRow;
DataSet souceDataSet = new DataSet();
復制DataSet
DataSet object = souceDataSet.Copy();//深復制
DataSet object = souceDataSet.Clone();//淺復制,只復制架構
復制DataTable
objectTable = sourceTable .Copy();//深復制
objectTable = sourceTable .Clone();//淺復制,只復制架構
復制DataRow
那我們應該如何復制DataRow的數據了,下面將著重介紹幾種方法
1、ImportDataRow方法:
public void ImportDataRow( DataRow DataRow);
objectTable = sourceTable.clone();//必須先復制表的架構,使具有相同的的列或關系!
foreach (DataRow oRow in sourceTable)
{
objectTable.ImportDataRow(oRow);//在objectTable中添加一個新行,并將sourceRow的值復制進去,要求表的結構一樣!
}
2、自定義復制
objectTable.Columns.Add ("id");//不需要有一樣的架構,只復制自己需要的列!
Object [] myArry = new Object [1];
foreach (DataRow oRow in sourceTable)
{
tempRow = objectTable.NewRow();//此方法必須調用!
myArry[0] = oRow["id"];//如果myArry中沒有源表中的id列的話就會報錯!
tempRow.ItemArray = myArry;//ItemArray屬性為Object類型數組,根據程序的需要需要可自行復制多個列的數據!
objectTable.Rows.Add(tempRow); //此方法必須調用,否則DataRow中的數據將不能顯示!
}
3、LoadDataRow方法:
public DataRow LoadDataRow(Object[] values,bool fAcceptChanges);
Object[] newRow = new Object[3];
// 設置對象數組的值
newRow[0] = "Hello";
newRow[1] = "World";
newRow[2] = "two";
DataRow myRow;
ObjectTable.BeginLoadData();
// 將新行添加到表中
myRow = ObjectTable.LoadDataRow(newRow, true);//標志要設置為true,表示添加新行
ObjectTable.EndLoadData();
該方法比較復雜,如果只是簡單的復制現有行的數據來添加新行的話建議不要采用,具體用法請參看sdk文擋。
DataRow的復制
如果直接通過RequirDT.Rows.Add(row),則運行時會出現"該行已經屬于一個表"的提示錯誤!至于其中的原因,通過DataSet和DataTable類比,從通常意義來說應該不會出現錯誤提示,但是細細想來,我覺得應該是由于DataTable的架構設計所致,借鑒關系數據庫中的關系表,datacolumn定義了DataTable的整體架構,而具體的datarow是符合該架構的一條記錄罷了!所以具有該架構的行只能添加到具有相同架構的表中!同時RequireDT.Rows.Add()實現捕獲 System.ArgumentException(The row ther belongs to another table or ready belongs to this table.)我想其實現也限制了不能通過該方法實現!
鑒于以上
1.ImportRow方法
DataTable RequireDT = SourceDT.Clone();
RequireDT.ImportRow(row);
2.見網上有這樣實現的
RequireDT.Rows.Add(row.ItemArray)
但是我編寫代碼并不能實現,該函數的功能是Creates a row using specified values and adds it to the System.Data.DataRowCollection。所以也需要先拷貝源數據表的結構,方可成功!
3. 以下方法也可以實現,但是也得先復制表的結構
ObjectTable.BeginLoadData();
myRow = ObjectTable.LoadDataRow(newRow, true);
ObjectTable.EndLoadData();
原文鏈接:https://www.cnblogs.com/me115/archive/2011/04/07/2008818.html
相關推薦
- 2022-10-23 C/C++指針介紹與使用詳解_C 語言
- 2022-01-11 npm install 報錯 gyp info it worked if it ends with
- 2023-03-19 匯編語言LDR指令和LDR偽指令詳解_匯編語言
- 2022-10-06 Django數據映射(一對一,一對多,多對多)_python
- 2022-07-04 python如何生成任意n階的三對角矩陣_python
- 2022-12-21 kubernetes?k8s?存儲動態掛載配置詳解_云其它
- 2022-09-10 pycharm下載包的時候出現?no?information?available的解決_python
- 2022-09-10 python中isoweekday和weekday的區別及說明_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支