web-dev-qa-db-ja.com

ストアドプロシージャから複数のテーブルを返す

私のwinformアプリケーションには、次のシナリオがあります。

1つのイベントで複数のテーブルを取得したい。すべてのテーブルをsingle server cycle,datasetとして返すか、一度に1つのテーブルを取得してseparate server cycle for each tableを使用しますか?利点は何ですか?

25
Nithesh

通常の方法は、一度にすべてを取得することです。

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];
49
balexandre

各テーブルを個別にロードし、スレッドを使用すると、パフォーマンスを大幅に改善できます。

データセットも非常に重いため、可能な限り避けてください。

1
c0deNinja