1

複数のテーブルからデータを収集することで、ビジネスオブジェクトを再水和します。

SELECT * FROM CaDataTable;
SELECT * FROM NyDataTable;
SELECT * FROM WaDataTable;

など...(C#3.5、SQL Server 2005)

私はバッチを使用しています:

    void BatchReader()
    {
        string sql = "Select * From CaDataTable" +
                     "Select * From NyDataTable" +
                     "Select * From WaDataTable";

        string connectionString = GetConnectionString();
        using (SqlConnection conn = new SqlConnection(connectionString)) {
            conn.Open();
            SqlCommand cmd = new SqlCommand(sql, conn);
            using (SqlDataReader reader = cmd.ExecuteReader()) {
                do {
                    while (reader.Read()) {
                        ReadRecords(reader);
                    }
                } while (reader.NextResult());
            }
        }
    }

また、同じ接続に対して複数のコマンドを使用しました。

    void MultipleCommandReader()
    {
        string connectionString = GetConnectionString();
        string sql;
        SqlCommand cmd;
        using (SqlConnection conn = new SqlConnection(connectionString)) {
            conn.Open();  

            sql = "Select * From CaDataTable";
            cmd = new SqlCommand(sql, conn);
            using (SqlDataReader reader = cmd.ExecuteReader()) {
                while (reader.Read()) {
                    ReadRecords(reader);
                }
            }

            sql = "Select * From NyDataTable";
            cmd = new SqlCommand(sql, conn);
            using (SqlDataReader reader = cmd.ExecuteReader()) {
                while (reader.Read()) {
                    ReadRecords(reader);
                }
            }

            sql = "Select * From WaDataTable";
            cmd = new SqlCommand(sql, conn);
            using (SqlDataReader reader = cmd.ExecuteReader()) {
                while (reader.Read()) {
                    ReadRecords(reader);
                }
            }
        }
    }

これらの手法の1つは、他の手法よりも大幅に優れていますか?また、2番目の方法でMARSを使用すると、メリットがありますか?つまり、接続文字列にMultipleActiveResultSets = Trueを設定して大きなメリットを得るのと同じくらい簡単ですか?

4

2 に答える 2

2

各テーブルでデータ構造が同じである場合、次のようにします。

Select *, 'Ca' Source From CaDataTable
union all
Select *, 'Ny' Source From NyDataTable
union all
Select *, 'Wa' Source From WaDataTable
于 2009-06-17T18:48:39.190 に答える
0

2 つのバージョンのタイミングを実際に合わせずに、推測することしかできません....

バージョン 1 (BatchReader) の方が高速であることを期待しています。データベースへのラウンドトリップが 1 回しかないためです。バージョン 2 では、実行するクエリごとに 1 つずつ、合計 3 つの異なるラウンドトリップが必要です。

しかし、繰り返しになりますが、実際に測ってみないと分かりません。

マルク

ああ、PS:もちろん、実際のシナリオでは、返される列を制限するのにも役立ちます。たとえば、フィールドのリストをSELECT *使用SELECT (list of fields)しないで、できるだけ短くしてください。

于 2009-06-17T21:07:13.883 に答える