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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.23617 の関連記事表示

<< 0 >>
■23617  Re[4]: オプティミスティック同時実行制御 Insert処理
□投稿者/ yan -(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句の内容を書くのも面倒なのでどうにか自作例外でできないかと思案中です。
記事No.23608 のレス /過去ログ44より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -