方法 : 同時実行エラーを処理する
更新 : 2007 年 11 月
DBConcurrencyException オブジェクトをキャッチして、同時実行違反により発生する問題の解決に活用できます。DBConcurrencyException オブジェクトは、エラーの原因となったデータ行を返します。詳細については、「DBConcurrencyException メンバ」を参照してください。
次の例では、エラーの原因となったデータ行の最初の列がエラー メッセージに表示される場合に、データ ソースを try/catch ブロック内の NorthwindDataSet の内容で更新することを試みます。
メモ : |
---|
データベース更新エラーを処理するための 1 つの方法を次のコードに示します。このコードにおいては、データベースへの接続が存在すること、データセットが存在すること、および更新コマンドを実行すると同時実行違反が発生することを前提としています。詳細および完成したコード例については、「チュートリアル : 同時実行例外の処理」を参照してください。 |
同時実行違反を解決するには
try/catch ブロック内からデータベースを更新するコマンドを実行します。
例外が発生したら、catch ステートメントの Row プロパティを調べて違反の原因を特定します。
アプリケーションのビジネス ルールに基づいてエラーを解決するコードを追加します。
次のコードでは、アプリケーションのアダプタとデータセットの例として、CustomersTableAdapter および NorthwindDataSet を使用しています。
Try CustomersTableAdapter.Update(NorthwindDataSet) Catch ex As DBConcurrencyException Dim customErrorMessage As String customErrorMessage = "Concurrency violation" & vbCrLf customErrorMessage += CType(ex.Row.Item(0), String) MessageBox.Show(customErrorMessage) ' Add business logic code to resolve the concurrency violation... End Try
try { customersTableAdapter.Update(northwindDataSet); } catch (DBConcurrencyException ex) { string customErrorMessage; customErrorMessage = "Concurrency violation\n"; customErrorMessage += ex.Row[0].ToString(); // Add business logic code to resolve the concurrency violation... }