データ参照時にDBに接続していなければならない「接続型」と
ADO.NETのDataTableオブジェクトやDataSetオブジェクトにデータを取得してから使い、
データ参照時には接続している必要のない「非接続型」がある。
ここでは、接続型でのデータ取得についてメモします。
Oracle DataAccessへの参照を追加してください。

DataReaderを使って1レコード読み込んだ時DBから1レコード取得する為Readメソッドを実行している間は、Oracleと接続が維持されている必要がある。
サンプル EMP表の内容を取得し表示する。

取得ボタンを押したあと

Imports Ora = Oracle.DataAccess.Client
Private Sub cnOpenClose(ByVal isOpen As Boolean)
Try
If IsNothing(oraCn) Then
oraCn = New Ora.OracleConnection( _
"data source=orcl;User id=scott;Password=tiger;")
End If
If isOpen Then
If Not oraCn.State = ConnectionState.Open Then
oraCn.Open()
End If
Else
If oraCn.State = ConnectionState.Open Then
oraCn.Close()
End If
End If
Catch ex As Ora.OracleException
Throw New ApplicationException(ex.Message)
Catch ex As Exception
Throw New ApplicationException(ex.Message)
End Try
End Sub
Private Sub getData_EMP()
Dim oraCmd As Ora.OracleCommand = Nothing
Dim oraRd As Ora.OracleDataReader = Nothing
Try
'DB接続
cnOpenClose(True)
'Command
oraCmd = New Ora.OracleCommand( _
"select ENAME,JOB from EMP where EMPNO = " & _
TextBox1.Text, oraCn)
’Reader
oraRd = oraCmd.ExecuteReader
If oraRd.Read Then
TextBox2.Text = oraRd.Item("ENAME").ToString.TrimEnd
TextBox3.Text = oraRd.Item("JOB").ToString.TrimEnd
End If
'必ずClose!!!
oraRd.Close()
Catch ex As Exception
Msg = ex.ToString
Msgtitle = "レコード取得エラー"
MessageBox.Show(Msg, Msgtitle, MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Finally
If Not IsNothing(oraRd) Then
If Not oraRd.IsClosed Then
oraRd.Close()
End If
oraRd.Dispose()
End If
If Not IsNothing(oraCmd) Then
oraCmd.Dispose()
End If
'DB切断
cnOpenClose(False)
End Try
End Sub
Private Sub Button1_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
getData_EMP()
End Sub
ConnectionStringプロパティに接続文字列をセットします。
Openメソッドを実行します。
OracleCommandオブジェクトに選択条件(SQL)を設定して、ExecuteReaderメソッドを実行。
ExecuteReaderメソッドの実行により、Oracle上に選択条件を満たすレコードが確保され、レコードを読み出す為のカーソル情報をメソッドの戻り値として返します。
この返された値を受け取るのがOracleDataReader。
SELECT文とOracleConnectionオブジェクトを設定して、OracleCommandオブジェクトを生成。
OracleDataReaderのReadメソッドで、Oracleカーソル位置にある1レコードをOracleDataReaderのItemコレクションに転記。
(1回のReadメソッドで読むレコード数はDataReaderのFetchSizeとレコード長で決まる)
itemオブジェクトに入った値をTextBoxのTextプロパティにセット。
OracleDataReaderは使い終わったら必ずCloseする。
Oracleデータベースと切断します。
このような手順でデータを取得します。
DataReaderは一般的に高速であるとされますが、先頭からしか読めないなど注意事項があります。
あと、接続されている状態で処理する事と、DataReaderをCloseする事をお忘れなく!