現在、コードで使用できるデータベースから結果を取得するために DataTable を使用しています。
ただし、Web ショーの多くの例では、代わりに DataSet を使用し、コレクション メソッドを介してテーブルにアクセスしています。
SQL の結果の保存方法として DataSets または DataTables を使用する利点はありますか?
それは、持ち帰るデータの種類に大きく依存します。DataSet は (事実上) DataTable オブジェクトの単なるコレクションであるため、複数の異なるデータ セットを 1 つのオブジェクトに返すことができるため、より管理しやすくなります。
パフォーマンスに関しては、.NET コンストラクトの「間違った」選択よりも、最適化されていないクエリの方が非効率になる可能性が高くなります。少なくとも、それは私の経験です。
大きな違いの 1 つは、DataSet は複数のテーブルを保持でき、それらのテーブル間の関係を定義できることです。
単一の結果セットのみを返す場合は、DataTable の方が最適化されると思います。DataSet が行う機能を提供し、複数の DataTable を追跡するには、いくらかのオーバーヘッド (小さいと認められます) が必要だと思います。
1.x では、DataTables では実行できず、DataSets では実行できなかったことがありました (正確には覚えていません)。すべてが 2.x で変更されました。これが、多くの例がまだ DataSet を使用している理由だと思います。DataTables はより軽量であるため、より高速である必要があります。結果セットを 1 つだけ取得する場合は、2 つの中から選択するのが最適です。
DataSet の機能の 1 つは、ストアド プロシージャで複数の select ステートメントを呼び出すことができる場合、DataSet はそれぞれに対して 1 つの DataTable を持つことです。
BeginLoadData() の呼び出し、データの挿入、EndLoadData() の呼び出しなど、DataTable を埋めるときに使用できるいくつかの最適化があります。これにより、インデックスのメンテナンスなど、DataTable 内の一部の内部動作がオフになります。詳細については、この記事を参照してください。
とにかく単一のテーブルのみを扱っている場合、私が見つけた最大の実際的な違いは、DataSet には "HasChanges" メソッドがありますが、DataTable にはありません。ただし、どちらにも「GetChanges」があるため、それを使用してnullをテストできます。