从存储过程返回多个表

时间:2011-08-30 06:27:59

标签: c# .net sql-server winforms stored-procedures

在我的winform应用程序中,我有以下场景:

我希望在单个事件上获得多个表。将dataset中的所有表格作为single server cycle,返回,或者及时获取一张表并使用separate server cycle for each table哪一个更好?一个人有什么优势呢?

2 个答案:

答案 0 :(得分:48)

通常的做法是一次性完成。

只需构建您的SELECT,就会有DataSet填充所有表格。

using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(myConnString))
{
    using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand())
    {
        cmd.CommandText = "myMultipleTablesSP";
        cmd.Connection = conn;
        cmd.CommandType = CommandType.StoredProcedure;

        conn.Open();

        System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(cmd);

        DataSet ds = new DataSet();
        adapter.Fill(ds);

        conn.Close();
    }
}

例如,如果您在SP中返回2个表,例如:

SELECT * FROM [TableA];
SELECT * FROM [TableB];

您可以访问此表格:

DataTable tableA = ds.Tables[0];
DataTable tableB = ds.Tables[1];

答案 1 :(得分:1)

如果单独加载每个表并使用线程,则可以大大提高性能。

数据集也非常重...所以尽可能避免使用它们。