SSブログ

VB.NETでDB操作(データ取得篇) [プログラミング]

前回、せっかくVisual Basic .NET を使って、Oracleのデータベースへアクセスする方法を調べたので、もう少しメモ。


DBからデータを取得する

Dim conn As New System.Data.OleDb.OleDbConnection("Provider=MSDAORA;" & _
                                                  "Data Source=" & サーバ & ";" & _
                                                  "User ID=" & ユーザ & ";" & _
                                                  "Password=" & パスワード & ";")
' Oracle 9.2の場合。バージョンが違うと書き方も変わるかも

Dim sql As String = "select * from TABLE1"

Dim da As New System.Data.OleDb.OleDbDataAdapter(sql, conn)

Dim ds As New System.Data.DataSet
da.Fill(ds, "XXX")

Dim i As Integer
For i = 0 To ds.Tables("XXX").Rows.Count - 1
    Console.WriteLine(ds.Tables("XXX").Rows.Item(i).Item("NAME"))
Next

Fill()の2つ目の引数の内容は、一意になるのなら何でも良いみたい。

データを参照する箇所は、こう↓書くこともできます。

Dim dt As New System.Data.DataTable
da.Fill(dt)

Dim i As Integer
For i = 0 To dt.Rows.Count - 1
    Console.WriteLine(dt.Rows.Item(i).Item("NAME"))
Next

DataSet と DataTable との違いは、
実際にデータを保持しているのが DataTable で、その DataTable をいくつかまとめて保持しているのが DataSet と考えたら良いのかな。
なので、DataSet を使うときは、どの DataTable を使うかを、その都度指定する必要があります(上の例だと XXX と指定している)

どう使い分けたらいいのかは良く分からないけど、その辺は臨機応変に……、ということで。


DBへの問い合わせの度に OleDbDataAdapter オブジェクトを作成するのは無駄っぽいので、使い回せないかを考えて見ます。

Dim conn As New System.Data.OleDb.OleDbConnection(~略~)

Dim da As New System.Data.OleDb.OleDbDataAdapter

da.SelectCommand = conn.CreateCommand()

Dim ds As New System.Data.DataSet

conn.Open()

da.SelectCommand.CommandText = "select * from TABLE1"
da.Fill(ds, "XXX")

da.SelectCommand.CommandText = "select * from TABLE2"
da.Fill(ds, "YYY")

conn.Close()
  1. OleDbDataAdapter のコンストラクタには、何も指定する必要がありません。
  2. OleDbDataAdapter オブジェクトの SelectCommand プロパティに OleDbConnection オブジェクトの CreateCommand メソッドで作ったコマンドSystem.Data.OleDb.OleDbCommandオブジェクトを設定します。
  3. OleDbCommand オブジェクトの CommandText プロパティにSQLを指定して、Fill() を呼び出せば、結果が取得できます。

OleDbConnectionOpenFillメソッド

Fill メソッドは、内部で(自動で)DBへの接続OleDbConnectionOpenと切断OleDbConnectionCloseを行います。
しかし、事前に OleDbConnectionOpenを行っておけば、Fill メソッドはDBへの接続と切断を行わなくなるので、連続してDBへアクセスする際の(1アクセス毎に接続と切断を繰り返す)無駄を省くことができます。
その場合、きちんと自前でClose も呼び出す必要がありますが。


OleDbDataAdapter を使わない方法

Dim conn As New System.Data.OleDb.OleDbConnection(~略~)

Dim sql As String = "select * from TABLE1"

Dim cmd As New System.Data.OleDb.OleDbCommand(sql, conn)

' コンストラクタの引数を省略し、
' cmd.Connection = conn
' cmd.CommandText = sql
' としても可

conn.Open()

Dim reader As System.Data.OleDb.OleDbDataReader = cmd.ExecuteReader()

Do While reader.Read()
    Console.WriteLine(reader("NAME"))
Loop

conn.Close()

機能が少なくなっている分、処理も軽いんじゃないのだろうか……。


つづく

[飛行機] 今日の一冊
蘭方医・長崎浩斎 大江戸謎解き帳

大江戸謎解き帳

  • 作者: 永井 義男
  • 出版社/メーカー: 祥伝社
  • 発売日: 1998/05
  • メディア: 単行本
ヒロインは萌えキャラ

タグ:VB.NET DB .net Oracle
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。