【问题标题】:Adding to a dataset using another full dataset使用另一个完整数据集添加到数据集
【发布时间】:2013-12-24 08:23:27
【问题描述】:

我正在寻找一种在 C# 的 foreach 循环中将一个数据集添加到另一个数据集的方法。

public DataTable getFiles(List<string> userIDs)
{
    DataSet ds = new DataSet();
    DataTable dtFileContents = new DataTable();
    string spUpdate = "usp_Update";
    string spSelect = "usp_Select";

    try
    {
        foreach (string item in userIDs)
        {
            ds = OracleConnectionHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString, spSelect.ToUpper(), userIDs);
            OracleConnectionHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString, spUpdate.ToUpper(), userIDs);
        }

        dtFileContents = ds.Tables[0];
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return dtFileContents;
}

所以,我需要的只是一种不覆盖先前数据集的方法。 ds += ...之类的东西,但我在任何地方都找不到。

我想过合并数据集,但不知道需要多少数据集。

我怎样才能做到这一点?

【问题讨论】:

  • 目前尚不清楚您实际想要达到的目标。 "overwrite the previous dataset. Like ds += ..." 是什么意思?你试过DataTable.MergeDataSet.Merge吗?
  • @TimSchmelter 你说得对。我试图在更新之前先选择我的数据库中的记录,然后根据 userIds 更新我的数据库。每个用户 ID 都将拉回任意数量文件的属性。所以,我希望这些属性在数据表中。下次循环执行新的数据表时,将返回相同的列。我想将该数据表附加到网格视图的旧数据表的末尾。合并工作完美。我之前尝试的时候一定是做错了什么。谢谢您的帮助。如果您发布此内容,我将标记为答案。

标签: c# asp.net recursion datatable dataset


【解决方案1】:

如果返回单个结果集不是绝对必要的,则可以更改方法的签名以返回它们的列表:

public IEnumerable<DataTable> getFiles(List<string> userIDs)
{
    var result = new List<DataTable>();
    string spUpdate = "usp_Update";
    string spSelect = "usp_Select";

    try
    {
        foreach (string item in userIDs)
        {

            DataSet ds = OracleConnectionHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString, spSelect.ToUpper(), userIDs);
            OracleConnectionHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString, spUpdate.ToUpper(), userIDs);

            result.Add(ds.Tables[0]);
        }


        return result;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

另一方面,您可能只需要编写另一种方法,手动将一个 DataTable 的内容附加到另一个 DataTable。正如您所指出的,合并可能不是您想要的,因为它会以不同的方式处理插入和更新,我怀疑您想要的相当于 SQL UNION。

public void Join (DataTable existing, DataTable newContent)
{
    foreach (var row in newContent.Rows)
    {
       var newRow = existing.NewRow();
       // Copy data over
       existing.Rows.Add(newRow);
    }
}

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-06-07
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    • 2022-11-15
    • 2011-02-16
    相关资源
    最近更新 更多