VB.NETでOracle接続
サンプル
ユーザID、パスワードを入力し、OKボタンでOracleに接続します。

Imports Oracle.DataAccess.Client
Public Class frmConnection
Private Msg As String
Private MsgTitle As String
Private cn As OracleConnection = Nothing
'''
''' データベース接続
'''
'''
Private Sub ConnectionOpen()
Dim UserID As String
Dim Password As String
Dim ConnectionString As String = ""
Try
UserID = TextUserID.Text.Trim
Password = textPassword.Text.Trim
If UserID.Trim.Length = 0 Or Password.Trim.Length = 0 Then
Msg = "ユーザ/パスワードを入力してください"
MsgTitle = "確認"
MessageBox.Show(Msg, MsgTitle, MessageBoxButtons.OK, MessageBoxIcon.Information)
Else
ConnectionString = My.Settings.conDataSource & "User ID=" & UserID & ";" & "password=" & Password
clsGlobal.gConnetionString = ConnectionString
Try
cn = New OracleConnection(ConnectionString)
cn.Open()
Label1.Text = "接続中.."
Catch ex As OracleException
Msg = ex.Message
MsgTitle = "データベース接続エラーです(Oracle)"
MessageBox.Show(Msg, MsgTitle, MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
End If
Catch ex As Exception
Msg = ex.Message
MsgTitle = "データベース接続エラーです"
MessageBox.Show(Msg, MsgTitle, MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
End Sub
'''
''' データベース切断
'''
'''
Private Sub ConnectionClose()
Try
If Not IsNothing(cn) Then
If cn.State = ConnectionState.Open Then
cn.Close()
Label1.Text = "DB未接続"
End If
cn.Dispose()
End If
Catch ex As OracleException
Msg = ex.Message
MsgTitle = "データベース切断エラーです"
MessageBox.Show(Msg, MsgTitle, MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
End Sub
Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
ConnectionOpen()
End Sub
Private Sub frmConnection_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) _
Handles Me.FormClosed
ConnectionClose()
End Sub
Private Sub frmConnection_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label1.Text = "DB未接続"
End Sub
Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
ConnectionClose()
End Sub
End Class
接続
OracleConnectionオブジェクトのConnectionStringプロパティに接続するのに必要なユーザ名、パスワード、ネットサービス名をそれぞれのキーワードと共に指定します。これを接続文字列といいます。
その後Openメソッドを実行します
ConnectionString = My.Settings.conDataSource & _
"User ID=" & UserID & ";" & _
"password=" & Password
cn = New OracleConnection(ConnectionString)
cn.Open()
切断
切断するにはOracleConnectionのCloseメソッドを実行します。
If Not IsNothing(cn) Then
If cn.State = ConnectionState.Open Then
cn.Close()
End If
cn.Dispose()
End If
接続プーリングについて
Oracleへの接続は、負荷の高い処理です。頻繁に接続・切断を行う場合、パフォーマンス劣化の原因となります。
接続プーリングではアプリケーション側で接続を閉じても実際には接続を残しておき、次回接続時に接続が残っていれば再利用しパフォーマンスを上げる事が出来ます。
「接続文字列」に明示しない場合、接続プーリングは有効となります。
Poolong = true : 接続プーリング有効(デフォルト)
Pooling = false : 接続プーリング無効
| Min Pool Size | プール内の接続の最小数(デフォルト1) |
|---|---|
| Incr Pool Size | 接続プールでより多くの接続が必要になったときに、接続プーリングで作成される新しい接続の数(デフォルト5) |
| Connection Lifetime | 接続の最大存続期間(秒) (デフォルト 0) アプリケーションが接続を閉じると、接続プーリングは、接続存続期間がConnection Lifetimeを超えているかを調べ超えていれば接続を閉じる。 |
| Max Pool Size | 接続プールの接続の最大数を設定(デフォルト 100) |
| Decr Pool Size | 未使用の確立済接続量がMax Pool Sizeを超えた時、クローズされる接続数。(デフォルト 1) 接続が使用されていない場合、接続プーリングは接続を閉じる。 接続は3分ごとに閉じる。Decr Pool Sizeは3分ごとに閉じる接続数を設定。 |
接続プーリングサンプル
接続プーリングを使った場合と使わない場合で接続数の増え方を調べてみた。
接続プーリングを利用した場合
データ取得後、すぐに接続を閉じています。
実行後は以下のとおりセッションが残っています。

接続プーリングを利用しない場合
プーリングを利用した場合と同じく、データ取得後、すぐに接続を閉じています。
ただし、接続文字列で Pooling=False と明示的に指定しています。
実行後は、以下のとおりセッションがありません。
