|
■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句の内容を書くのも面倒なのでどうにか自作例外でできないかと思案中です。
|