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 と明示的に指定しています。
実行後は、以下のとおりセッションがありません。