質問: お世話になります。 初歩な質問でいつもすみません。 C#を使用し、Accessとデータのやり取りを行う必要がでてきたので 勉強から始め直したのですが、このDataSetの使い道がいまだによくわかりません。 まず、『メモリ上にデータを保持する』とか書いてあるのですが、これは単に ListやDictionary等のコレクションクラスで二次元などの配列を作り、 そこに値を入れていくということとはまた別なのでしょうか? もし同じなら、わざわざDataSetなるもを使用せずとも、自分で領域を作ってさえおけば それで用が事足りてしまうのではないかという気がします。 また、DataSet側の値を操作、変更してもデータベース側も自動で変更されるわけでは ないので、結局はADOなどでゴリゴリSQLを走らせなければならないというと、 『ただの入れ物』にすぎないということなのでしょうか? やりたいことは、データベース側のデータをリアルタイムで取得し、変更などが 行われた場合にデータベース側への更新を極力少ない手間で行いたいのですが、 そういったことはこのDataSetは受け付けてくれるのでしょうか? 基本的な内容で申し訳ありませんが、何卒お願いいたします。
回答: 2001年当時のADO.NET関連の機能や概念のために作られていまし「た」。 ・型付きDataSet, 型なしDataSet(join Select、DataTableのグループ化など) ・型付きDataTable, 型なしDataTable(DBのテーブルに対応) ・TableAdapter(単純なDBのテーブルへのCRUD操作の対応) ・データバインディング これは主に2つの視点から見ることができます。 1. 2001年当時の、現在でいうORM自動生成機能(結局SQL直書きがmustなので流行らず※) 2. DataGridViewなどWindows.Forms UIパーツとの双方向データバインド。MVVMのVM的 2番はDataGridViewなどでバインドが非常に便利なので、今でもよく使われます。 (EntityFrameworkやDapperで取得した内容を、わざわざDataTableに詰めなおす、などやったり...) 普通のコレクションもバインドはできますが、UI側が強制的にReadonlyになります。 ・List型 ・配列 etc. ※ 単純なSelect/Insert/Update/Deleteであれば、 TableAdapterのメソッド呼び出しでSQL自動発行されるのですが、 実業務でそんな単純に済むことが多くなく、結局SQL書いた方が早くね?ってなります。