C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 44 を表示中)
■23617 / )  Re[4]: オプティミスティック同時実行制御 Insert処理
□投稿者/ yan (11回)-(2008/08/19(Tue) 13:16:09)
No23616 (魔界の仮面弁士 さん) に返信
> ■No23614 (yan さん) に返信
>>一意制約違反の場合、OracleExceptionのCodeプロパティが1であることが今わかりました。
> つまり、"ORA-00001" であった、という事ですよね。
>
>>ただSystem.Data.Common名前空間を使っているのでSystem.Data.DbExceptionでキャッチしたいのですが
> キャッチできますよ。
> OracleException は、DbException を継承していますので。
>
>>System.Data.DbExceptionではCodeプロパティが無いようで、現在煮詰まっております。
> キャストするとか。

書き方が悪かったようです。すいません。
DbExceptionでOracleExceptionをキャッチすることはできますが
DbExceptionでキャッチすると、OracleExceptionにキャストする以外にCodeプロパティの値を取得できないです。
ただOracleからSQLServerに変更される可能性があるため、OracleExceptionがコードのあちこちに散らばるのは避けたいので
"ORA-00001"を定数にしておく方がDBが変更された際の、コード変更は少なくて済むかと考えています。

Const UNIQUE_ERR As String ="ORA-000001"
Dim adp As DbDataAdapter
Dim tbl As DataTable

中略

Try
adp.Update(tbl)
Catch ex As DbException
If ex.Message.IndexOf(UNIQUE_ERR) Then
Throw New DbCurrencyException(ex.message,ex)
Else
Throw
End If
End Try


DB更新があるたびに Catch句の内容を書くのも面倒なのでどうにか自作例外でできないかと思案中です。

返信 編集キー/


管理者用

- Child Tree -