So-net無料ブログ作成
検索選択

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
  • メディア: 単行本
ヒロインは萌えキャラ

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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0