私のwinformアプリケーションには、次のシナリオがあります。
1つのイベントで複数のテーブルを取得したい。すべてのテーブルをsingle server cycle,
のdataset
として返すか、一度に1つのテーブルを取得してseparate server cycle for each table
を使用しますか?利点は何ですか?
通常の方法は、一度にすべてを取得することです。
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];
各テーブルを個別にロードし、スレッドを使用すると、パフォーマンスを大幅に改善できます。
データセットも非常に重いため、可能な限り避けてください。