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