我有以下代码,我在创建基于对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是否正确。
如何实施?
由于
答案 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]
}
注意:这是未经测试的代码。它只是给你一个想法和一些东西。