【问题标题】:How to add multiple Datasets to Single DataTable?如何将多个数据集添加到单个数据表?
【发布时间】:2014-06-18 23:32:51
【问题描述】:

我有以下代码,其中我基于对 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 是否正确。

如何实现?

谢谢

【问题讨论】:

  • DataSet 是 DataTable 对象的容器,而不是相反。 DataAdapters 可以填充 DataTable 对象,看来您实际上并不需要数据集。

标签: c# datatable dataset


【解决方案1】:

大概您正在为 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 个数据表,则可以按照 Mithrandir 提供的链接使用“合并”。当然,您需要将其添加到上面的循环中并考虑第一次运行(您不能将表 1 合并为空)。在循环之前创建一个新的 DataTable 并执行以下操作:

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

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

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2021-06-07
    • 1970-01-01
    • 2017-12-23
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多