【问题标题】:Copy DataTable from one DataSet to another将 DataTable 从一个 DataSet 复制到另一个
【发布时间】:2011-06-21 06:58:36
【问题描述】:

我正在尝试向新数据集 X 添加一个位于不同数据集 Y 内的数据表。 如果我直接添加它,我会收到以下错误:

DataTable 已经属于另一个 DataSet。

我是否必须克隆 DataTable 并将所有行导入到其中,然后将新的 DataTable 添加到新的 DataSet 中?有更好/更简单的方法吗?

【问题讨论】:

    标签: c# datatable dataset


    【解决方案1】:

    使用这个通用函数

    public DataTable CopyDataTable(DataTable dtSource, int iRowsNeeded)
    {
    
        if (dtSource.Rows.Count > iRowsNeeded)
        {
            // cloned to get the structure of source
            DataTable dtDestination = dtSource.Clone();
            for (int i = 0; i < iRowsNeeded; i++)
            {
                dtDestination.ImportRow(dtSource.Rows[i]);
            }
            return dtDestination;
        }
        else
            return dtSource;
    }
    

    假设您要将 sourceSet 的第一个表复制到 destinationSet。
    像这样称呼它

    DataTable destinationTable = CopyDataTable(sourceSet.Tables[0], sourceSet.Tables[0].Rows.Count);
    DataSet destinationSet = new DataSet();
    destinationSet.Tables.Add(destinationTable);
    

    【讨论】:

      【解决方案2】:

      有两种简单的方法可以做到这一点:

      DataTable.Copy

      不要使用DataTable.Clone,而是使用DataTable.Copy 创建数据表的副本;然后将副本插入目标DataSet

      dataSetX.Tables.Add( dataTableFromDataSetY.Copy() );
      

      DataSet.Merge

      您也可以为此使用DataSet.Merge

      dataSetX.Merge(dataTableFromDataSetY);
      

      但是请注意,如果您要使用此方法,您可能需要确保您的目标 DataSet 尚未包含同名的表:

      • 如果目标数据集不包含同名表,则在数据集中创建表的新副本;

      • 如果同名表已经在目标数据集中,那么它将与传递给Merge 的表合并,最终得到两者的混合。

      【讨论】:

        【解决方案3】:
        IEnumerable<DataRow> query =  from sourceTbl in sourceTbl.AsEnumerable()
        where [any condition you want]
        select order;
        DataTable boundTable = query.CopyToDataTable<DataRow>();
        

        我不确定我是否正确理解了您的问题。希望此代码有所帮助

        【讨论】:

          【解决方案4】:

          这应该对你有用

          X.Tables.Add(Y.Tables[<tablename|index>].Copy());
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-24
            • 2013-08-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-06
            • 2010-10-14
            相关资源
            最近更新 更多