【问题标题】:Row belongs to another table行属于另一个表
【发布时间】:2017-06-24 21:02:13
【问题描述】:

我正在尝试将数据行从一个本地数据表传输到另一个数据表。但我收到一条错误消息:

System.Data.dll 中出现“System.ArgumentException”类型的异常,但未在用户代码中处理

附加信息:该行已经属于另一个表。

我的代码:

        DataTable missedQueue = new DataTable();
        DataSet queue = DBMgr.GetDataSet("SELECT * FROM queue");

        DataRow dr = queue.Tables[0].NewRow();
        for (int i = 0; i < queue.Tables[0].Columns.Count; i++)
        {
            dr[queue.Tables[0].Columns[i].ColumnName] = queue.Tables[0].Rows[0][i];
        }

        missedQueue.Rows.Add(dr); // error shown here

但是在我研究并将代码更改为

       missedQueue.Rows.Add(dr.ItemArray);

它说“输入数组比这个表的列数长。

【问题讨论】:

  • 这个错误是由于missedQueue表没有schema造成的。它只是一个没有任何列的空数据表。您需要克隆源表(如果您只想复制第一行),或者如果您想将整个表复制到新表中,请使用 Copy 方法。
  • @Steve 我已经创建了missedQueue这个表,列和队列表完全一样。
  • 错误信息怎么解释?
  • 尝试使用调试器检查源表中 Columns.Count 的值与目标表中的相同值。根据错误信息,它们不能相同
  • 您能否澄清一下您是要复制整个表格还是只复制第一行?

标签: c# asp.net visual-studio


【解决方案1】:

你可以使用DataTable.Copy() 方法并复制DataTable

DataSet queue = DBMgr.GetDataSet("SELECT * FROM queue");
DataTable missedQueue = queue.Tables[0].Copy();

【讨论】:

  • 错误消失了,但是该行没有复制/转移到另一个表。我该如何解决?
  • @user8090359,不应该这样。你的源表有行吗?你检查了吗?
  • 这应该可以完成工作@user8090359
  • @kblok 我不知道为什么它不工作.. 如果missedQueue 已经是一个现有的表但它内部是空的,它会影响吗
  • 我改变了上面的例子,应该可以正常工作
【解决方案2】:

使用:

DataSet queue = DBMgr.GetDataSet("SELECT * FROM queue");
DataTable missedQueue = queue.Clone();
.
.
.
missedQueue.Rows.Add(dr.ItemArray);

【讨论】:

    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2012-08-23
    • 2020-08-07
    • 1970-01-01
    相关资源
    最近更新 更多