web-dev-qa-db-ja.com

何が良いですか:DataSetまたはDataReader?

私はちょうどこのトピックを見ました: Datatable vs Dataset しかしそれは私の疑問を解決しませんでした。 (以前にVB6で作業していたときにRecordSetを使用しましたが、DataSetは非常によく似ているので、DataSetを使用する方がはるかに簡単でした。).

したがって、DataReaderを「学習」するか、DataSetを使用し続ける必要がありますか?データ表 ?長所と短所は何ですか?

52
Daniel

それはあなたのニーズ次第です。最も重要な違いの1つは、DataReaderが完了するまでデータベースへの開いた接続を保持し、DataSetがインメモリオブジェクトになることです。コントロールをDataReaderにバインドした場合、それはまだ開いています。また、DataReaderは、操作できないデータを読み取るためのフォワードオンリーのアプローチです。 DataSetを使用すると、必要に応じて前後に移動したり、データを操作したりできます。

いくつかの追加機能:DataSetはシリアル化してXMLで表現できるため、他の層に簡単に渡すことができます。 DataReaderはシリアル化できません。

一方、データベースから読み取る大量の行があり、ビジネスルールのプロセスに渡す場合、DataReaderはすべての行を含むDataSetをロードするよりも意味があり、メモリを消費し、影響を与える可能性がありますスケーラビリティ。

少し古くなっていますが、まだ便利なリンクを次に示します。 ADO.NET DataReaderとDataSetの対比

73
Ahmad Mageed

それは本質的には「どちらが良いのか:バケツかホースか?」

DataSetはここのバケットです。切断されたデータのセットを持ち運んで作業することができますが、バケットを運ぶためのコストが発生します(快適なサイズに保つのが最善です)。

データリーダーはホースです。データリーダーを通過すると、データへの片方向/ 1回のみのアクセスが提供されます。すべての利用可能な水を一度に運ぶ必要はありませんが、タップ/データベースに接続する必要があります。

そして、バケットをホースで満たすことができるのと同じ方法で、DataSetをデータリーダーで満たすことができます。

私が作りたいのは、彼らが異なることをするということです...

個人的にDataSetを頻繁に使用することはありませんが、一部の人々はそれらを愛しています。ただし、BLOBアクセスなどにデータリーダーを使用しています。

200
Marc Gravell

Marc's pointに加えて、データベースなしでDataSetを使用できます。

XMLファイルから、またはプログラムからのみ入力できます。あるデータベースの行で埋めてから、向きを変えて別のデータベースに書き出します。

DataSetは、リレーショナルスキーマの完全にメモリ内の表現です。実際のリレーショナルデータベースで使用するかどうかはあなた次第です。

12
John Saunders

さまざまなニーズ、さまざまなソリューション。

あなたが言ったように、データセットはVB6 Recordsetに最も似ています。つまり、必要なデータをプルダウンして渡し、やりたいことをやります。ああ、終わったらやがてそれを取り除く。

Datareaderはより制限されていますが、必要なのはデータを1回読み取るだけで、はるかに優れたパフォーマンスを提供します。たとえば、グリッドを自分で埋めている場合-つまり、データを引き出し、それを実行し、各行がグリッドを埋めてからデータを捨てる-datareaderはデータセットよりもはるかに優れています。一方、データを更新する意図がある場合は、datareaderを使用しないでください。

そう、はい、それを学んでください-しかし、適切な場合にのみ使用してください。データセットにより、柔軟性が大幅に向上します。

5
AviD

2番目の質問に答えるには、はい、DataReaderについて学習する必要があります。どちらかといえば、あなたはそれらを使用する方法を理解しています。

この状況では、DataSetを使用する方が優れていると思います-データバインディングとすべてを実行しているからです(CPUサイクル対人間の努力を考えています)。

どちらがより良いパフォーマンスを提供するかについて。それはあなたの状況に大きく依存します。たとえば、バインドしているデータを編集して変更をバッチ処理している場合は、DataSetを使用する方が適切です。

0
Martin Clarke

DataReader vs Dataset

1)-DataReaderは接続指向アーキテクチャで設計されています
-DataSetは非接続アーキテクチャで設計されています

2)-DataReaderはデータへのフォワード専用アクセスを提供します
-DataSetは、データへのスクロール可能なナビゲーションを提供します

3)-DataReaderは読み取り専用です。その下にあるデータを変更することはできません
-DataSetは更新可能で、その下にあるデータに変更を加えて、それらの変更をデータソースに送り返すことができます。

4)-DataReaderは、データの検索や並べ替えなどのオプションを提供しません
-DataSetは、データの検索や並べ替えなどのオプションを提供します

0
siddu patil