Hatena::ブログ(Diary)

とりこびとのざっき

2007/12/07

[]DataSet ってすごいね。

もちろん型付ですが。

ところで、επιστημηさんってDataSetとかさわさわしてるんでしょうかw

Mr_T_0023Mr_T_0023 2007/12/07 09:13 Mr.Tです、こんにちは。
例えば、とりこびとさん的にどこがすごい、って感じてるのでしょう?
#私はDataSetをまともに使ったことないや。

torikobitotorikobito 2007/12/07 09:24 Mr.Tさん、コメントありがとうございます。


>とりこびとさん的にどこがすごい


デザイナが強い(ボソ。


テーブル構造に対して私には直感的なんだと思っています。
ただ、テーブル構造じゃないデータでも使ったりしてますけど・・・。orz

Mr_T_0023Mr_T_0023 2007/12/07 09:46 ああ、なるほど。
デザイナで作れるから、何からどう引っ張るのかが
直感的でよい、ということですね。

テーブル構造じゃないデータって...うん?
単なるリスト構造のデータとか?配列っぽいもんとか?

επιστημηεπιστημη 2007/12/07 09:57 さわさわしてないっす。必要になるシチュエーションに巡り合わないのか使えるシチュエーションに気づかないのか。
つまりなんなのか/どこがおいしいのか教えてくれさい。

torikobitotorikobito 2007/12/07 11:11 コメントありがとうございます。


>>Mr.Tさん


>テーブル構造じゃないデータって


ちょっとデータオブジェクトをWriteXMLしたいときとかw(サボりすぎw
出来上がりはHogeDataTableなんで納得はしていませんけど。


>>επιστημηさん


>さわさわしてないっす。


そんな気がしていますた。


>つまりなんなのか


データのセットですw


>どこがおいしいのか教えてくれさい。


そのあたりは画伯がくわしいとです。
http://ravipen.net/sakamotoblog/post/2007/12/%e5%9e%8b%e4%bb%98%e3%81%a7%e3%83%bc%e3%81%9f%e3%81%9b%e3%81%a3%e3%81%a8%e3%81%89%e2%99%aa.aspx

ぽぴ王子ぽぴ王子 2007/12/07 11:16 むしろ僕の場合、DBに由来しないDataTableの使い方をすることが多いです。


もしくは、DBから取得したテーブルをゴリゴリやって違う感じに整形したりとか。
なのでDataTable(主に型なし)ラヴ☆って感じです。
むしろExcelに毛が生えた的な使い方に近いです。


XMLはXMLDocumentクラスを使うので、DataTableから利用したことはありません。

επιστημηεπιστημη 2007/12/07 11:45 極めてマジレス
1>> つまりなんなのか
> データのセットですw
2>> どこがおいしいのか教えてくれさい。
> そのあたりは画伯がくわしいとです。

1が答になってないので2に説得力を感じません。
データのセットがDataSetならList(Of String)もDataSetですか?

画伯画伯 2007/12/07 11:54 >>極めてマジレス

とりこびっち殿

ちゃんとεπιστημη先生にお答しておくよーにっ!!

>>説得力を感じません

ぐはぁぁぁぁ・・・。

torikobitotorikobito 2007/12/07 13:42 コメントありがとうございます。


>>ぽぴ王子さん


>DBに由来しないDataTableの使い方をすることが多い
>もしくは、ゴリゴリやって違う感じに整形したり
>DataTable(主に型なし)ラヴ☆


そうなのですか。
’もしくは’のほうの違う感じにはあらかじめ型を付けておかないのですか?



>>επιστημηさん


>極めてマジレス


それは困りました。
なんなのかって言われるとなんなのでしょう・・・言葉にできにくい・・・。

宿題・・・ですか?


>>画伯さん


>ちゃんとεπιστημη先生にお答しておくよーにっ!!


現状難しいです。orz
個人的にはLinqあたりでまたできることがふえてそうな気がしています。

Streetw☆Streetw☆ 2007/12/07 14:14 >言葉にできにくい
どれもデータのセットの一つの形ですよね〜
DBのデータを格納する用途としてもっとも適したクラスの中の一つみたいなw
どこもおかしくないと思います!

>DataTable(主に型なし)ラヴ☆
私も☆ミ
LINQとの相性はどうかなぁって前から思ってたから今試してみるとバッチリでした!
LINQtoSQLだと使う場面は減るかもしれませんけど。
病気です♪

ところで、
DataTable table = new DataTable();
とか書いてからDataTableを消してvarに変えてます。
全部書いてから(ryに変えるのと同じw

ぽぴ王子ぽぴ王子 2007/12/07 15:27 > ’もしくは’のほうの違う感じにはあらかじめ型を付けておかないのですか?


これは現在やっている作業がそんな感じだからですね。
型付きデータセットは使わず、いきなりSQLでゴリゴリ持ってきて、って感じになってます。
でもSQLだと無理な部分があるので、持ってきたDataTableをゴリゴリしてゴリゴリって感じで
ゴリゴリしたあとでラーします。まさにスペクトルマンです。


型付きデータセットは以前の現場で扱っていましたが、便利な反面、ちょっと変更するといきなり
中身が崩れていたりすることがあって、扱いは慎重にしないといけなかったです。
個人的には便利だけど発展途上のイメージ。


いま別の人のソースを見たら
SQL = SQL & ”SELECT”
みたいにやってました。もちろんSQLはStringです。
ええ。死ねばいいと思います(ぉ
これからそれを修正しなくちゃいけません。たぶん作り直しだと思います。

HiroMHiroM 2007/12/08 00:17 んー、ちょっとまじめに書いてみましょうか。

DataSetはオフラインデータベースと形容されるようにデータベースの構成をそのままコンテナクラスとして構成したクラスで主な中身はDataTableの配列になっています。

DataTableの中身はDataColumnの配列とDataRowの配列になっています。

DataColumnは各列のカラム名や型などの情報が格納されています。
DataRowは行の情報としてデータが格納できるようになっています。

他にもDataTable同士のリレーションの情報などデータベースに関する情報がいろいろ格納することができるようになっています。

ただ、このままですと、データベースを簡易的に模したコレクションクラスということになるのですが、オフラインデータベースと呼ばれるにはADO.NETと呼ばれるデータベースアクセス用のクラスライブラリで利用される形式であるのが大きいと思います。

ADO.NETはデータプロバイダと呼ばれるさまざまなデータベースに対応したドライバのような役割のライブラリが存在しています。 標準ではODBCやOleDb、SqlServerなどのものが入っていますが他にも各データベースメーカーが独自にプロバイダを作成したりしています。

これらのプロバイダを利用して、各データベースの検索結果をDataSetに格納したり、DataSetからアップデートしたりすることが可能となります。

これだけだとDataSetはADO.NETで利用されるための汎用のデータ格納場所ということになるのですが、これ以外にあらかじめデータベースのスキーマ情報が格納された状態のDataSet、型付きデータセットと呼ばれるデータセットの存在があります。

型付きデータセットはDataSetクラスを継承したクラスであらかじめDataTableのスキーマ情報が任意の数保存しておくことが可能です。 

これにより、データベースからスキーマ情報を取り出したり、プログラム上でDataColumnを追加してスキーマ情報を作成するためのコーディングを行ったりすることなく事前に独自クラスとしてあらかじめ用意しておくことが可能です。

型付きデータセットの作成はデザイナで行うこともできますが、ウィザードによりSQLを直接指定して作成したり、データベースからデザイナに対して直接ドラッグアンドドロップして作成することも可能です。

これらのことからデータベースからのデータの入出力を行うのに取り扱い安いコンテナということで業務アプリ開発では欠かせないクラスになっているんですね。

非常に簡単ですが、こんなのでわかりますか?(^^;

ひろえむひろえむ 2007/12/08 00:19 うわ、投稿してから気がついた。 すげー文字数。

これは見づらい(^^;

ブログのエントリにすればよかったorz

Streetw☆Streetw☆ 2007/12/10 00:16 >個人的にはLinqあたりでまたできることがふえてそうな気がしています
こんなことできます。
#上では我慢したけど、やっぱり長いの貼り付けちゃいます。


var table = new DataTable();
table.Columns.Add(”Name”, typeof(string));
table.Columns.Add(”Age”, typeof(int));
table.Rows.Add(”Aさん”, 10);
table.Rows.Add(”Bさん”, 20);
table.Rows.Add(”Cさん”, 30);


// ちょっとだけ型付
var people =
  from DataRow row in table.Rows
  let Name = (string)row[”Name”]
  let Age = (int)row[”Age”]
  where Age >= 20
  select new { Name, Age, SourceRow = row };


foreach (var person in people)
{
  Console.WriteLine(”{0}…{1}歳”, person.Name, person.Age);
  // person.Ageとかは読み取り専用です
  person.SourceRow[”Age”] = person.Age + 1;
}


// +1されてるの。おどろき@@
foreach (var person in people)
  Console.WriteLine(”{0}…{1}歳”, person.Name, person.Age);

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/torikobito/20071207/1196986181