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