【问题标题】:How do I store multiple results from a stored procedure into a dataset?如何将存储过程中的多个结果存储到数据集中?
【发布时间】:2011-07-15 21:31:16
【问题描述】:

如何将 StoredProcedure 中的结果集合并到 ASP.NET 中的一个数据集中?

下面是我在asp.net中的代码

SqlDataAdapter adap = new System.Data.SqlClient.SqlDataAdapter("sp_Home_MainBanner_TopStory",con);
adap.SelectCommand.CommandType = CommandType.StoredProcedure;
adap.SelectCommand.Parameters.AddWithValue("@rows", 9);

DataSet DS = new DataSet();

adap.Fill(DS, "Table1");
adap.Fill(DS, "Table2");

GridView1.DataSource = DS.Tables["Table2"];
GridView1.DataBind();

即使有两个适配器,我如何将结果合并到一个数据集中?

【问题讨论】:

  • 我不明白你的意思。那一个数据集。

标签: c# asp.net stored-procedures ado.net dataset


【解决方案1】:

数据集包含表。对于上面的示例,如果您有两个 SqlDataAdapter,每个都调用一个存储过程并像上面那样存储它们。

adapter1.Fill(DS, "Table1");
adapter2.Fill(DS, "Table2");

这将从您的第一个查询中获取表结果并将其作为 Table1 存储在 DataSet DS 中。然后它将在同一个数据集中存储另一个表(表 2)。要访问这些表,请使用以下代码:

DS.Tables["Table1"]  //Or Table2, or whatever you name it during your Fill.

您已经有了正确的流程,您只需要查看 DataSet 的工作原理并决定如何调用您的信息。

但是,如果您想将结果合并到一个 DataTable 中,则需要遍历这些表并合并信息。

ex:
DataTable combinedTable = new DataTable();
//Create columns

foreach (DataRow row in DS.Tables["Table1"].Rows)
{
    //Create rows?  Copy information over?  Whatever you want to do.
}

【讨论】:

    【解决方案2】:

    试试这个:

    adapter1.Fill(DS, "Table1, Table2");
    

    这在这里工作,所以......

    【讨论】:

      【解决方案3】:

      MS SQL 中,我们创建了一个类似的过程:

      [ create proc procedureName
          as
          begin
              select * from student
              select * from test
              select * from admin
              select * from result
          end
      ]
      

      C# 中,我们编写以下代码来检索DataSet 中的这些值

      {
          SqlConnection sqlConn = new SqlConnection("data source=(local);initial catalog=bj001;user id=SA;password=bj");
          SqlCommand sqlCmd = new SqlCommand("procedureName", sqlConn);
          sqlCmd.CommandType = CommandType.StoredProcedure;
          sqlConn.Open();
          SqlDataAdapter sda = new SqlDataAdapter(sqlCmd);
          DataSet ds = new DataSet();
          sda.Fill(ds);
          sqlconn.Close();
      
          // Retrieving total stored tables from a common DataSet.              
          DataTable dt1 = ds.Tables[0];
          DataTable dt2 = ds.Tables[1];  
          DataTable dt3 = ds.Tables[2];
          DataTable dt4 = ds.Tables[3];  
      
          // To display all rows of a table, we use foreach loop for each DataTable.
          foreach (DataRow dr in dt1.Rows)
          {
              Console.WriteLine("Student Name: "+dr[sName]);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-05-21
        • 2013-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-22
        • 2012-07-19
        • 2019-04-26
        相关资源
        最近更新 更多