继续将查询结果添加到datatable

时间:2015-10-06 00:31:17

标签: c# datatable dataset sqldataadapter

我有一个包含两个表的数据集。表[0]填充了多行。然后我需要迭代这些行,并为每一行运行另一个查询并将这些结果填充到表[1]。在循环中用多行填充数据集的正确方法是什么?我所在的缩写代码示例:

 DataSet ds = new DataSet();
    sql = myquery1;
    SqlDataAdapter da = new SqlDataAdapter(sql, conn);
    da.Fill(ds, "Products");

foreach (DataRow dr in ds.Tables[0].Rows)
{
   productID = ds.Tables[0].Rows[0]["ProductID"].ToString();

   if (productID != String.Empty)
   {
      sql = String.Empty;
      sql = myquery2 where productID = 'xxxxx'
      da = new SqlDataAdapter(sql, conn);
      da.Fill(ds, "ProductProperties");
    }
}

这会在第一个循环中填充“ProductProperties”数据表,但不会添加将来的结果。将多个结果集添加到数据表的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

你这是错误的方式。您只需要一个查询来填充子表。 E.g。

Dim ds As New DataSet

Using connection As New SqlConnection("connection string here"),
      parentAdapter As New SqlDataAdapter("SELECT * FROM ParentTable",
                                          connection),
      childAdapter As New SqlDataAdapter("SELECT * FROM ChildTable WHERE ParentID IN (SELECT ParentID FROM ParentTable)",
                                         connection)
    connection.Open()

    parentAdapter.Fill(ds, "Parent")
    parentAdapter.Fill(ds, "Child")
End Using

您需要做的就是将父查询复制为子表的子查询。如果需要,您甚至可以将两个查询放在一个数据适配器中。关键是没有必要遍历父记录并为每个记录执行单独的查询。

答案 1 :(得分:0)

您的查询应返回两个记录集

SELECT ProductId, Name
FROM Products

SELECT ProductId, Property1, Property2
FROM ProductProperties

然后,您可以将以上查询中的数据读取到DataSet,如下所示。因此,您将在DataSet中获得两个表,其中包含来自上述查询的两个记录集的结果

using (SqlConnection con = new System.Data.SqlClient.SqlConnection(connString))
{
   using (SqlCommand cmd = new SqlCommand())
   {
    cmd.CommandText = "query";
       cmd.Connection = con;

    con.Open();

    SqlDataAdapter adapter = new SqlDataAdapter(cmd);

    DataSet ds = new DataSet();
    adapter.Fill(ds);
    con.Close();
   }
}