我正在寻找一种在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 + = ...但我找不到任何地方。
我考虑过合并数据集,但我不知道我需要多少数据集。
我该如何做到这一点?
答案 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);
}
}
我希望这会有所帮助。