ページの先頭行へ戻る
Symfoware Server V10.0.1 Connection Managerユーザーズガイド(9.x)

5.3.3 ODBCアプリケーションの作成例

ODBCアプリケーションでは、SQLStateプロパティでSQLSTATE値を取得し、エラー状態を認識します。

API名

オブジェクト名

プロパティ名

RDO

rdoError

SOLState

ADO

Error

SOLState

ADO.NET

ODBCError

SQLState

以降にODBCアプリケーションでの作成例を記載します。

参照

その他のアプリケーション作成例については、“アプリケーション開発ガイド(ODBCドライバ編)”を参照してください。


ここではロードシェア運用の場合の例を示します。

Visual Basic .NETでADO.NETを使用したアプリケーションの作成例

'オブジェクト宣言
Dim con As Microsoft.Data.Odbc.OdbcConnection
Dim trn As Microsoft.Data.Odbc.OdbcTransaction

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim i As Integer
    Dim msgstr As String
    Dim rollback As Boolean
    Dim result As Integer

    rollback = False
    result = -1

    'OdbcConnectionオブジェクトの生成
    con = New Microsoft.Data.Odbc.OdbcConnection _
              ("DSN=DSN01;UID=USER01;PWD=PASS01")

    Try

        'コネクション接続
        con.Open()
        trn = con.BeginTransaction

        While result = -1
            If rollback Then
                trn.Rollback()
                trn = con.BeginTransaction
            End If
            result = CommandExecute(rollback)
            If result = -2 Or result = -3 Then
                result = -1
            End If
        End While

        If result = 1 Then
            trn.Commit()
        Else
            trn.Rollback()
        End If

        'コネクション切断
        con.Close()

        'OdbcExceptionクラスのキャッチ
    Catch ex As Microsoft.Data.Odbc.OdbcException
        For i = 0 To ex.Errors.Count - 1
            msgstr &= ex.Errors(i).Message & ControlChars.Cr
            msgstr &= "SQLSTATE: " & ex.Errors(i).SQLState & ControlChars.Cr
        Next
        MessageBox.Show(msgstr, "ODBC Error Message", _
                      MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Try

    'オブジェクトの破棄
    con.Dispose()

End Sub

Function CommandExecute(ByRef rollback As Boolean) As Integer

    Dim com As Microsoft.Data.Odbc.OdbcCommand
    Dim i As Integer
    Dim msgstr As String

    CommandExecute = 1

    Try

        'OdbcCommandオブジェクトの生成
        com = New Microsoft.Data.Odbc.OdbcCommand( _
            "INSERT INTO SAMPLE1.TESTTBL VALUES " _
            & "(1,10.5,DATE'2006-12-31','INSERT DATA')", con)
        com.Transaction = trn
        'INSERT文実行
        com.ExecuteNonQuery()

        'OdbcExceptionクラスのキャッチ
    Catch ex As Microsoft.Data.Odbc.OdbcException

        msgstr = ""
        For i = 0 To ex.Errors.Count - 1
            'SQLSTATEにより切り分けを行う。
            If ex.Errors(i).SQLState = "40003" Or _
                ex.Errors(i).SQLState = "40703" _
            Then
                'SQLSTATEが40003か40703の場合、再実行する。
                CommandExecute = -2
                GoTo EndCommandExecute
            ElseIf ex.Errors(i).SQLState = "71003" Or _
                ex.Errors(i).SQLState = "71410" _
            Then
                'SQLSTATEが71003か71410の場合、再実行する。
                'rollbackするフラグも立てる。
                CommandExecute = -3
                rollback = True
                GoTo EndCommandExecute
            Else
                'その他のエラーの場合、エラーを返却する。
                msgstr &= "SQLSTATE: " & ex.Errors(i).SQLState _
                                       & ControlChars.Cr
                msgstr &= ex.Errors(i).Message & ControlChars.Cr
                CommandExecute = 2
            End If
        Next
        'その他のエラーの場合、メッセージを表示
        MessageBox.Show(msgstr, "ODBC Error Message", _
                      MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Try

EndCommandExecute:
    com.Dispose()

End Function