zoukankan      html  css  js  c++  java
  • 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 都有复制的方法了。


     
     
  • 相关阅读:
    09.session #
    08.cookie
    07.中间件
    06.类视图
    374. 猜数字大小 力扣 二分 简单却易错
    278. 第一个错误的版本 力扣 二分 简单
    1449. 数位成本和为目标值的最大数字 力扣 动态规划 难 string赋值和比较
    279. 完全平方数 力扣 动态规划 中等
    518. 零钱兑换 II 力扣 动态规划,中等吧
    203. 移除链表元素 力扣
  • 原文地址:https://www.cnblogs.com/dabaopku/p/1670756.html
Copyright © 2011-2022 走看看