Возврат нескольких таблиц из хранимой процедуры - PullRequest
25 голосов
/ 30 августа 2011

В моем приложении winform у меня есть следующий сценарий:

Я хочу получить несколько таблиц для одного события. Возвращать все таблицы как dataset в single server cycle, или получать по одной таблице за раз и использовать separate server cycle for each table, какая из них лучше? Какие преимущества один перед другим?

Ответы [ 2 ]

48 голосов
/ 30 августа 2011

Обычный способ - получить все сразу.

просто создайте свои 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();
    }
}

еслинапример, вы возвращаете 2 таблицы в вашем SP, например:

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

вы бы получили доступ к этим таблицам как:

DataTable tableA = ds.Tables[0];
DataTable tableB = ds.Tables[1];
1 голос
/ 30 августа 2011

Если вы загружаете каждую таблицу отдельно и используете потоки, вы можете значительно повысить производительность.

Наборы данных также имеют очень большой вес ... поэтому старайтесь избегать их, если это возможно.

...