【问题标题】:Declaring DataRow within a foreach or for Loop在 foreach 或 for 循环中声明 DataRow
【发布时间】:2023-03-28 05:56:01
【问题描述】:

情况是这样的。我有一个选择查询,它获取我想要插入到新 DataTable 中的 DataRows 数组。

但是在尝试添加行时出现以下错误:

“行已经属于另一个表”。

所以我尝试在循环(for 和 foreach 循环)中创建和初始化一个新的 DataRow,然后在初始化 DataRow 时抛出一个错误:

“由于其保护级别而无法访问”

有什么想法吗?感觉就像我错过了一些愚蠢的东西。

我的第一个错误代码:

var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = "+Convert.ToString(MerkmalID));

        _DTCurrentAuspragung = new DataTable();
        for (int i = 0; i < DRCurrentAuspragung.Length;i++ )
        {
            DataRow RowAdd = DRCurrentAuspragung[i];
            _DTCurrentAuspragung.Rows.Add(RowAdd);
        }

对于第二个错误:

var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = "+Convert.ToString(MerkmalID));

        _DTCurrentAuspragung = new DataTable();
        foreach (DataRow dr in DRCurrentAuspragung)
        {
            DataRow RowAdd = new DataRow();
            RowAdd = dr;
            _DTCurrentAuspragung.Rows.Add(RowAdd);
        }

提前致谢。

【问题讨论】:

    标签: c# linq datatable datarow


    【解决方案1】:

    此异常的原因是一个DataRow 对象不能属于多个表。一种解决方案是在 ImportRow 方法的帮助下创建此行的副本:

      _DTCurrentAuspragung.ImportRow(RowAdd);
    

    并且不要忘记在选择行后使用Clone(),因为这两个表必须具有相同的结构:

    DataTable _DTCurrentAuspragung = _DTAuspragung.Clone();
    

    所以,结果是:

     var DRCurrentAuspragung = _DTAuspragung.Select(@"MerkmalID = " + Convert.ToString(MerkmalID));
    
     _DTCurrentAuspragung = _DTAuspragung.Clone();
     for (int i = 0; i < DRCurrentAuspragung.Length; i++ )
     {
             DataRow RowAdd = DRCurrentAuspragung[i];
             _DTCurrentAuspragung.ImportRow(RowAdd);
     }
    

    【讨论】:

    • @Terrance00 很高兴为您提供帮助。
    【解决方案2】:

    您可能想要使用ImportRow() 方法。请记住,您要向其中导入行的表必须与您要导入的行所属的表具有相同的结构(列名和类型)

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 2013-05-29
      • 2015-10-24
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多