使用另一个完整数据集添加到数据集

时间:2013-12-06 20:37:42

标签: c# asp.net recursion datatable dataset

我正在寻找一种在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 + = ...但我找不到任何地方。

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

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

如果返回单个结果集并不是绝对不完美的,您可以更改方法的签名以返回它们的列表:

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);
    }
}

我希望这会有所帮助。