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 と明示的に指定しています。


実行後は、以下のとおりセッションがありません。
プーリングを使ったときのセッション

修正履歴

Loading