私はちょうどこのトピックを見ました: Datatable vs Dataset しかしそれは私の疑問を解決しませんでした。 (以前にVB6で作業していたときにRecordSetを使用しましたが、DataSetは非常によく似ているので、DataSetを使用する方がはるかに簡単でした。).
したがって、DataReaderを「学習」するか、DataSetを使用し続ける必要がありますか?データ表 ?長所と短所は何ですか?
それはあなたのニーズ次第です。最も重要な違いの1つは、DataReaderが完了するまでデータベースへの開いた接続を保持し、DataSetがインメモリオブジェクトになることです。コントロールをDataReaderにバインドした場合、それはまだ開いています。また、DataReaderは、操作できないデータを読み取るためのフォワードオンリーのアプローチです。 DataSetを使用すると、必要に応じて前後に移動したり、データを操作したりできます。
いくつかの追加機能:DataSetはシリアル化してXMLで表現できるため、他の層に簡単に渡すことができます。 DataReaderはシリアル化できません。
一方、データベースから読み取る大量の行があり、ビジネスルールのプロセスに渡す場合、DataReaderはすべての行を含むDataSetをロードするよりも意味があり、メモリを消費し、影響を与える可能性がありますスケーラビリティ。
少し古くなっていますが、まだ便利なリンクを次に示します。 ADO.NET DataReaderとDataSetの対比 。
それは本質的には「どちらが良いのか:バケツかホースか?」
DataSet
はここのバケットです。切断されたデータのセットを持ち運んで作業することができますが、バケットを運ぶためのコストが発生します(快適なサイズに保つのが最善です)。
データリーダーはホースです。データリーダーを通過すると、データへの片方向/ 1回のみのアクセスが提供されます。すべての利用可能な水を一度に運ぶ必要はありませんが、タップ/データベースに接続する必要があります。
そして、バケットをホースで満たすことができるのと同じ方法で、DataSet
をデータリーダーで満たすことができます。
私が作りたいのは、彼らが異なることをするということです...
個人的にDataSet
を頻繁に使用することはありませんが、一部の人々はそれらを愛しています。ただし、BLOBアクセスなどにデータリーダーを使用しています。
Marc's pointに加えて、データベースなしでDataSetを使用できます。
XMLファイルから、またはプログラムからのみ入力できます。あるデータベースの行で埋めてから、向きを変えて別のデータベースに書き出します。
DataSetは、リレーショナルスキーマの完全にメモリ内の表現です。実際のリレーショナルデータベースで使用するかどうかはあなた次第です。
さまざまなニーズ、さまざまなソリューション。
あなたが言ったように、データセットはVB6 Recordsetに最も似ています。つまり、必要なデータをプルダウンして渡し、やりたいことをやります。ああ、終わったらやがてそれを取り除く。
Datareaderはより制限されていますが、必要なのはデータを1回読み取るだけで、はるかに優れたパフォーマンスを提供します。たとえば、グリッドを自分で埋めている場合-つまり、データを引き出し、それを実行し、各行がグリッドを埋めてからデータを捨てる-datareaderはデータセットよりもはるかに優れています。一方、データを更新する意図がある場合は、datareaderを使用しないでください。
そう、はい、それを学んでください-しかし、適切な場合にのみ使用してください。データセットにより、柔軟性が大幅に向上します。
2番目の質問に答えるには、はい、DataReaderについて学習する必要があります。どちらかといえば、あなたはそれらを使用する方法を理解しています。
この状況では、DataSetを使用する方が優れていると思います-データバインディングとすべてを実行しているからです(CPUサイクル対人間の努力を考えています)。
どちらがより良いパフォーマンスを提供するかについて。それはあなたの状況に大きく依存します。たとえば、バインドしているデータを編集して変更をバッチ処理している場合は、DataSetを使用する方が適切です。
DataReader vs Dataset
1)-DataReaderは接続指向アーキテクチャで設計されています
-DataSetは非接続アーキテクチャで設計されています
2)-DataReaderはデータへのフォワード専用アクセスを提供します
-DataSetは、データへのスクロール可能なナビゲーションを提供します
3)-DataReaderは読み取り専用です。その下にあるデータを変更することはできません
-DataSetは更新可能で、その下にあるデータに変更を加えて、それらの変更をデータソースに送り返すことができます。
4)-DataReaderは、データの検索や並べ替えなどのオプションを提供しません
-DataSetは、データの検索や並べ替えなどのオプションを提供します