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()
OleDbDataAdapter
のコンストラクタには、何も指定する必要がありません。OleDbDataAdapter
オブジェクトのSelectCommand
プロパティにOleDbConnection
オブジェクトの
CreateCommand
メソッドで作ったコマンド(System.Data.OleDb.OleDbCommand
)オブジェクトを設定します。OleDbCommand
オブジェクトのCommandText
プロパティにSQLを指定して、Fill()
を呼び出せば、結果が取得できます。
OleDbConnection
の Open
と Fill
メソッド
Fill
メソッドは、内部で(自動で)DBへの接続(OleDbConnection
の Open
)と切断(OleDbConnection
の Close
)を行います。
しかし、事前に OleDbConnection
の Open
を行っておけば、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()
機能が少なくなっている分、処理も軽いんじゃないのだろうか……。
つづく
今日の一冊 | ||
|
ヒロインは萌えキャラ |
コメント 0