不断添加到数据表

时间:2013-06-12 19:30:56

标签: c# for-loop datatable oledb

我有下面的代码,使用OleDB发送到数据库并使用信息填充数据集。然后检查以确保它在数据集中有某些内容,如果有,则将该数据集添加到数据表中,然后在函数末尾返回。

for (int i = 0; i < UserClassDict[UserName].ControlNumber.Count; i++)
                    {
                        string query = "SELECT * FROM [FNF Taxes] WHERE ControlNumber =" + UserClassDict[UserName].ControlNumber[i] + ";";
                        adapter.SelectCommand = new OleDbCommand(query, conn);
                        DataSet dataset = new DataSet();
                        adapter.Fill(dataset);

                        if (dataset.Tables[0].Rows.Count > 0)
                        {
                            dt = dataset.Tables[0];
                                                }
                    }

我的问题是这个。正如您可以通过for循环告诉该块所在的,它将运行多次,并且我希望它从DB中提取的每一行都被添加到数据表中。因此,当返回数据表时,它具有所有X行数。但是,正如在上面的代码块中一样,添加到数据表的唯一行是最近被拉的行。

4 个答案:

答案 0 :(得分:3)

使用DataTable.Merge()

DataTable dt = null;
for (int i = 0; i < UserClassDict[UserName].ControlNumber.Count; i++)
{
    string query = "SELECT * FROM [FNF Taxes] WHERE ControlNumber =" + UserClassDict[UserName].ControlNumber[i] + ";";
    adapter.SelectCommand = new OleDbCommand(query, conn);
    DataSet dataset = new DataSet();
    adapter.Fill(dataset);

    if (dataset.Tables[0].Rows.Count > 0)
    {
        if (dt == null)
            dt = dataset.Tables[0].Clone();
        dt.Merge(dataset.Tables[0]);
    }
}
return dt;

答案 1 :(得分:0)

我所知道的最直接的方法是继续加载DataTable的同一个实例。考虑一个看起来像这样的类:

private DataTable _dt = new DataTable();

...

private void FillMyDataTable()
{
    ...
    sda.Fill(_dt);
}

或在您的情况下,DataSet。另一个选项是Merge,它是DonBoitnott提供的解决方案。

答案 2 :(得分:0)

尝试在此级别应用连接方法 dt = dataset.Tables [0]; ...我会避免在迭代中的对象声明...循环看起来太忙...此外,您可以充分利用i中的for loop,而不是像[0], [i]那样dt .....允许{ {1}}存储连锁数据。

答案 3 :(得分:0)

我相信你可以运行一次查询。您不必在循环中创建所有这些对象。

              string where = "";
               string query = "SELECT * FROM [FNF Taxes] WHERE ControlNumber = {0};";
               for (int i = 0; i < UserClassDict[UserName].ControlNumber.Count; i++)
               {
                   if(i == UserClassDict[UserName].ControlNumber.Count -1 )
                      where+=UserClassDict[UserName].ControlNumber[i] ;
                   else
                       where += UserClassDict[UserName].ControlNumber[i] + ",";

               }

               adapter.SelectCommand = new OleDbCommand(string.Format( query,where), conn);
               DataSet dataset = new DataSet();
               adapter.Fill(dataset);

               if (dataset.Tables[0].Rows.Count > 0)
               {
                   if (dt == null)
                       dt = dataset.Tables[0];
               }