C#复制DataRow出现“该行已经属于此表”错误的解决办法(转)

 

C#复制DataRow出现“该行已经属于此表”错误的解决办法

来源:http://div.cn/2008/12/cdatarow.html
DataTable 复制 DataRow 出现 "该行已经属于另一个表"错误的解决办法 

DataTable dt = new DataTable(); dr=所要添加到dt的DataRow。 dt.Rows.Add(dr[); //出错提示为:该行已经属于另一个表
解决方法 dt.Rows.Add(dr.ItemArray); 


来源 http://koffer.cnblogs.com/archive/2004/07/08/22324.html

     最近项目太忙了,几乎没有时间来光顾这里了
在项目中除了负责自己的模块实现外,还做了一个不太称职的
TeamLeader

由于负责的模块很多数据的操作,经常遇到这种错误,“此行已属于另一个表”的错误。

 

导致这个错误的语句如下:

dtPriceTable.Rows.InsertAt(aDataRow,i);

或者

dtPriceTable.Rows.Add(aDataRow);

 

我分析了一下原因,因为DataRow DataTable 都是传引用调用的。所以一个行在一个表中了,就不能再增加到另外一个表。

 

具体的改善策略有两种:

1、   把原始DataRow的每列依次赋值。如下:

DataRow tempRow = dtItemPrice.NewRow();

tempRow ["First"] = aDataRow ["First "]

tempRow ["second"] = aDataRow ["second "]

tempRow ["third"] = aDataRow ["third "]

tempRow ["forth"] = aDataRow ["forth "]

tempRow ["Fifth"] = aDataRow ["Fifth "]

……

 

dtPriceTable.Rows.Add(tempRow)

2、  有个同事提醒我为什么不循环DataTable的每个列呢?我想是哦,为什么不呢!

呵呵,这样子,不管Table有多少列,只需要3句话就搞定了

DataRow aDataRow = dtItemPrice.NewRow();

    foreach(DataColumn aDataColumn in dtItemPrice.Columns)

    {

 aDataRow[aDataColumn.ColumnName] = drItemPrices[i][aDataColumn.ColumnName];

    }

InsertConditionType(aDataRow,dtItemPrice);

 

测试就可以了。

后来看了看DataSet  DataTable 都有一个方法:Copy(),复制该 System.Data.DataTable 的结构和数据。

 

那么结合这个函数,无论是DataSet  DataTable还是DataRow 都有复制的方法了。


 
 

posted on   大宝pku  阅读(5956)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

导航

< 2010年2月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 1 2 3 4 5 6
7 8 9 10 11 12 13
点击右上角即可分享
微信分享提示