1

SqlDataReader を使用して、Winform アプリにエンティティを設定しています。エンティティ クラスには、エンティティ クラスのプロパティとして設定したいデータベースにいくつかの外部キー属性があります。各プロパティは、ID および説明プロパティを持つ「属性」タイプになります。

システムの一部のユーザーはデータベースから遠く離れているため、データ アクセスのパフォーマンスは重要な考慮事項です。

単一の結果セットを返すストアド プロシージャに対して SqlCommand.ExecuteReader を複数回 (属性ごとに 1 回) 実行するか、複数の結果セットを返すストアド プロシージャに対して SqlCommand.ExecuteReader を 1 回実行し、SqlDataReader.NextResult を使用することができます。それらを移動して属性を設定します。

.NextResult でループすると、ストアド プロシージャとプロパティ割り当てのループが一致していることを確認する際に問題が発生します。proc の SELECT ステートメントの順序が変わると、winform アプリの割り当て順序がめちゃくちゃになります。

とにかく、SqlDataReader が読み取りごとにデータベースに戻る場合、SqlCommand.ExecuteReader の実行に多くの時間が追加されますか? 各属性に対して ExecuteReader を実行すると、割り当て側で物事がより明確になります。

ありがとう!

4

1 に答える 1

1

.Nextresult を使用すると、ADO.Net は結果セットごとにデータベースに戻りません。このすべてのロジックは、ADO.Net データ プロバイダーが実行されている場所 (データ アクセス レイヤー、おそらくアプリケーション サーバー、または UI レイヤーなど) にあります。

ただし、datareader を複数回実行すると、呼び出しごとにデータベースへの往復が 1 回行われます。したがって、このコードが実行されているレイヤーが DB から (往復時間で) 離れている場合は、.NextResult 手法を使用することをお勧めします。

また、データ リーダーの代わりに DataSet (複数の DataTables を含む) を使用することも検討する必要があります。

于 2009-07-27T14:08:58.110 に答える