如何将存储过程中的多个结果存储到数据集中?

Posted

技术标签:

【中文标题】如何将存储过程中的多个结果存储到数据集中?【英文标题】: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();

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

【问题讨论】:

我不明白你的意思。那一个数据集。 【参考方案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]);
    

【讨论】:

以上是关于如何将存储过程中的多个结果存储到数据集中?的主要内容,如果未能解决你的问题,请参考以下文章

从存储过程结果集中在表上插入/更新数据

将存储过程结果填充到 List<T>

VB.NET是如何使用ADO让存储过程返回数据表中的值呢?求解!

如何将单个结果集从返回多个集的 SQL 存储过程保存到临时表?

如何在 Google App Script 中使用参数调用 MySQL 存储过程?

MYSQL的存储过程如何返回查询到的行数据?