Abb*_*bas 5 c# asp.net ado.net stored-procedures dataset
如何将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();
Run Code Online (Sandbox Code Playgroud)
即使有两个适配器,我怎样才能将结果合并到一个数据集中?
小智 16
在MS SQL我们创建一个过程,如:
[ create proc procedureName
as
begin
select * from student
select * from test
select * from admin
select * from result
end
]
Run Code Online (Sandbox Code Playgroud)
在C#,我们编写以下代码来检索a中的这些值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]);
}
}
Run Code Online (Sandbox Code Playgroud)
数据集包含表。对于上面的示例,如果您有两个 SqlDataAdapter,每个调用一个存储过程并像上面那样存储它们。
adapter1.Fill(DS, "Table1");
adapter2.Fill(DS, "Table2");
Run Code Online (Sandbox Code Playgroud)
这将从您的第一个查询中获取表结果并将其作为 Table1 存储在数据集 DS 中。然后它将在同一个数据集中存储另一个表(Table2)。要访问这些表,您可以使用以下代码:
DS.Tables["Table1"] //Or Table2, or whatever you name it during your Fill.
Run Code Online (Sandbox Code Playgroud)
您已经有了正确的流程,您只需要查找数据集如何工作并决定如何调用您的信息。
但是,如果您想将结果合并到一个数据表中,则需要迭代这些表并合并信息。
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.
}
Run Code Online (Sandbox Code Playgroud)