データテーブルとデータセット


129

現在、DataTableを使用して、コードで使用できるデータベースから結果を取得しています。

ただし、Web上の多くの例では、代わりにDataSetを使用し、collectionsメソッドを介してテーブルにアクセスしています。

SQL結果の格納方法としてDataSetsまたはDataTablesを使用することには、パフォーマンスの面などで利点はありますか?


1
あなたがウェブアプリで作業している場合は、DataReaderを使用して検討する必要があります。aspnet.4guysfromrolla.com/articles/050405-1.aspx aspnet.4guysfromrolla.com/articles/051805-1.aspx devx.com/vb2themax/ Article / 19887/1954?pf = true
Chris Burgess

最終的に、DataTableとDataSetは、2002年にADO RecordSet ...からの便利な移行でした。最近では、それらを主要なデータのメタファーとして焼き付けるべきではありません。
マークグラベル

@MarcGravell最近の主要なデータの比喩として何を提案しますか?
m_a_s

回答:


94

それは本当にあなたが持ち帰っているデータの種類に依存します。DataSetは(事実上)DataTableオブジェクトのコレクションにすぎないため、複数の異なるデータセットを単一のオブジェクトに戻すことができるため、より管理しやすいオブジェクトになります。

パフォーマンスに関しては、.NETコンストラクトの「間違った」選択からよりも、最適化されていないクエリから非効率になる可能性が高くなります。少なくとも、それは私の経験でした。


29

1つの大きな違いは、DataSetは複数のテーブルを保持でき、それらのテーブル間の関係を定義できることです。

1つの結果セットのみを返す場合は、DataTableがより最適化されると思います。DataSetが行う機能を提供し、複数のDataTablesを追跡するには、多少のオーバーヘッドが必要になると思います。


8

1.xでは、以前はDataTablesができなかったことがDataSetsができなかったこと(正確には何を覚えていない)がありました。2.xで変更されたすべてのこと。私の推測では、多くの例がまだDataSetsを使用しています。DataTableは軽量であるため、高速である必要があります。1つの結果セットのみを取得する場合は、2つの結果セットの間での最良の選択です。


4
大きな問題の1つは、DataTableをシリアル化できず、WebServiceからの結果として返されないことでした。
マーティンクラーク

6

DataSetの1つの機能は、ストアドプロシージャで複数の選択ステートメントを呼び出すことができる場合、DataSetはそれぞれに対して1つのDataTableを持つことです。


1つのSQLCommandで複数のSQL選択クエリを実行し、データセットの各結果セットにアクセスすることもできます。Tables[i]
Jan

3

BeginLoadData()の呼び出し、データの挿入、EndLoadData()の呼び出しなど、DataTableにデータを入力するときに使用できるいくつかの最適化があります。これにより、インデックスのメンテナンスなど、DataTable内の一部の内部動作がオフになります。詳細については、この記事を参照してください。


1

とにかく単一のテーブルのみを処理する場合、私が見つけた最大の実用的な違いは、DataSetには「HasChanges」メソッドがありますが、DataTableにはないということです。ただし、どちらにも「GetChanges」があるため、それを使用してnullをテストできます。


0

DataTableオブジェクトは、行、列、および制約のメモリ内の表形式のキャッシュとして表形式のデータを表します。DataSetは、DataRelationオブジェクトと相互に関連付けることができるDataTableオブジェクトのコレクションで構成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.