如何将多个数据集添加到Single DataTable?

时间:2014-05-02 10:03:07

标签: c# datatable dataset

我有以下代码,我在创建基于对Oracle mdb的查询的数据集。

...

**OracleDataAdapter adapter = new OracleDataAdapter(sqlstr, conn);
OracleCommandBuilder builder = new OracleCommandBuilder(adapter);
DataSet dataset = new DataSet();
adapter.Fill(dataset);**


DataTable dataTable = dataset.Tables[0];

...

我希望在循环中使用突出显示的代码,然后将数据集对象添加到循环外的公共数据表中。

我需要使用datatable.Merge()吗?结果集中的' n'数据集需要组合成一个DataTable,因此我不确定Merge是否正确。

如何实施?

由于

1 个答案:

答案 0 :(得分:0)

据推测,您正在为Oracle mdb的每个查询创建一个新的'sqlstr'?如果是这样,您可以创建一个列表,将所有sqlstr放入,然后使用for循环循环遍历它们:

List<string> sqlstrings = new List<string>();

//add your sqlstr's here

DataSet dataset = new DataSet();

for(int i = 0; i < sqlstrings.count; i++)
{
    OracleDataAdapter adapter = new OracleDataAdapter(sqlstrings[i].ToString(), conn);
    OracleCommandBuilder builder = new OracleCommandBuilder(adapter);

    adapter.Fill(dataset.Tables[i]);
}

这会将您的所有查询都放入包含多个表的1个数据集中。然后,您可以在此处创建所有表之间的数据关系:http://msdn.microsoft.com/en-us/library/ay82azad(v=vs.110).aspx

但是,如果您只想创建1个DataTable,则可以根据Mithrandir提供的链接使用“Merge”。当然,您需要将其添加到上面的循环中并考虑第一次运行(您无法将表1与任何内容合并)。在循环之前创建一个新的DataTable并执行以下操作:

if(i > 0)
{
    dtBigTable.Merge(dataset.Tables[i]);
}
else
{
    //First table
    dtBigTables = dataset.Tables[0]
}

注意:这是未经测试的代码。它只是给你一个想法和一些东西。