- - PR -
DataReaderとDataSetについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-08-15 12:01
こんにちわ、なおみんです。
ASP.NETをC#で開発してます。 データベースからデータを取得する場合に、DataReaderを使う方法と、 DataSetを使う方法があることがわかりました。 DataSetにセットしたテーブルから値を一つ取り出すには DataSetのTablesからRowとColumを指定すれば取れそうなんですが、 具体的な指定方法がわかりません。 どなたか教えていただけないでしょうか。よろしくお願いします。 | ||||
|
投稿日時: 2002-08-16 13:17
多分、これでいけると思います。
私はこの方法でやってますが、もし他にいい方法があれば他の方フォローお願いします。 データセット名.Tables("テーブル名").Rows("行数").Item("カラム名") <例> Dim TempData As String TempData = DataSet1.Tables("TABLENAME").Rows("ROWNUM").Item("COLUMNNAME") | ||||
|
投稿日時: 2002-08-16 15:16
elmoさん
補足ですが、データベースにNullデータが含まれる場合、戻ってくる値はDBNullとなり、 記述のソースではエラーとなりますので、DBNullを変換する関数(自作する必要あり)を 通す必要があります。 なおみんさん DataSetとSQLDataReaderはまったく考え方が異なっています。 DataSetは、乱暴な言い方をしますと、データベース丸ごと持ってくる方法です。 (有識者の皆様、乱暴なことは重々承知しております。) それに対して、SQLDataReaderは、読み出し対象のテーブルの1行分だけを持っている 形になりますので、旧来のRDO・ADOでやっていた方法にかなり近いとお考えください。 必要なすべてのデータを読み出すためには、自前でループする必要があります。 わかり難いようでしたら、またご質問ください。 | ||||
|
投稿日時: 2002-08-16 22:57
DataSetを使って、データベースの内容を表示する場合、様々な方法があるようです。その内、僕自身が使っていてコーディングが楽だなと思っているのは以下の2つです。前提として、データベースに[商品]というテーブルがあるとして、それを元に[ProductAdp]というデータアダプターと、[ProductSet]というデータセットが作成されているとします。
1.DataViewを使う。 Dim Dset as New ProductSet() Dim Dview as New DataView ProductAdp.FILL(Dset) Dview.Table = Dset.Tables("商品") 'もしくは『Dset.Tables(0)』 For I = 0 to Dview.Count - 1 Dview(I)("在庫数") = 0 Next DataViewを用いたときのメリットは、上記のような表全体を通しての処理が、しやすいことです。一覧表示・一括更新などなど。また、DataViewにはいつでもフィルタ(要はWHERE)がかけられる[RowFilter]や、いつでも並べ替えが出来る[sort]など強力なプロパティが多いので、検索結果の表示などには一番向いています。 2.DataRowを使う。 Dim SPID as Integer = Request.QueryString("ID") Dim Dset as New ProductSet() ProductAdp.FILL(Dset) Dim r as Dset.商品Row = ProductSet.商品.FindByID(SPID) PNAME.Text = r.商品名 DataViewが一覧表示向きならば、DataRowはその一覧表示から選ばれた個別の商品情報の表示などに圧倒的に向いています。上のサンプル構文もそういったイメージです。一覧表示ページで選ばれた結果が、URLの末尾に[ID]として付属され、その数字を元に、商品テーブル内の該当の一行を新しくオブジェクトとして作っています。 DataRowでの上記サンプルの場合の絶対的な強みは『r.』で、オブジェクト「r」のプロパティとして各フィールドがインテリセンスで表示されることです!(笑) このプロパティの中にはNULLだった場合の制御用メンバも存在しますので使い勝手はいいです。 ほんとにADO.NETは良くできています。最初はDataSetが扱いづらいかったのは僕もですが、使い方がわかってくると、開発効率が格段と良くなるようです。 _________________ -------------------------------------- ネットビルド 小田原貴樹 odahara@netbuiuld.jp -------------------------------------- | ||||
|
投稿日時: 2002-08-17 06:20
DataTable, DataViewからFor...Nextループでレコードのカラム値を
取り出す方法です。
Happy Programming Akio Kasai | ||||
|
投稿日時: 2002-08-17 07:10
DataReaderのすべてのレコードのカラム値を取り出す方法です。
Happy Programming! Akio Kasai | ||||
|
投稿日時: 2002-08-19 11:17
elmoさん、和哉提督さん、うりゅうさん、Dr ADO.NETさん、返答ありがとうございます。
DataSetとDataReaderの違いについて、なんとなくわかりました(^^;; テーブルごとドーンと持ってきて処理したいのか、みたいな違いですね。 DataSetで持ってきて処理を行った後、そのまま返すほうがADO.NETっぽいです。 DataTable newTable = new DataTable("MEMBER"); sqlAdp_Sel.Fill(newTable); DataSetの内容をテーブルにして一行をDELETEしたり、一行をINSERTしたりは できるようになりました。 データセット名.Tables("テーブル名").Rows("行数").Item("カラム名") というコーディングが使えれば簡単なのでしょうが、C#では使えない(?)らしく、 newTable.Rows. の後でItemが選択肢にありません。 for文でループして、何列目のカラムを取得する・・・という方法が普通なのかなと考えてます。 もっと、よい方法がありそうな気がしますし、考え方の指摘などありましたら教えてください。 | ||||
|
投稿日時: 2002-08-19 16:00
私はC#で以下のようにしてます。 例)newTable.Rows[2]["LastName"] とすると3行目のLastName列が参照できます。 例)newTable.Rows[2][4] とすると3行目の5列目が参照できます。ループさせるならこちらですね。 |