OracleExceptionの例外処理について

タグの編集
投稿者 T  (社会人) 投稿日時 2020/4/1 13:40:40
お世話になります。
VBで、OracleExceptionの例外処理を細かくしたいです。
エラーを起こすと詳細欄にはORA-01400などのエラーコードが出てくるのですが、TryCatch文で例外処理をしようとすると、OracleException以外に書きようがないので、全てのOracleExceptionに対して一つの処理しか施せません。どうすれば数あるOracleExceptionをそれぞれ処理できるでしょうか。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/4/1 14:32:50
試していませんが、When あるいは If で処理できないでしょうか。

Catch ex As OracleException When ex.Number = 54
   'ORA-00054: リソース・ビジー、NOWAITが指定されていました。 
Catch ex As OracleException When ex.Number = 2291
   'ORA-02291: 整合性制約(string.string)に違反しました - 親キーがありません 
投稿者 T  (社会人) 投稿日時 2020/4/1 16:50:46
ex.Numberをex.Codeにすることで処理できました。
非常に助かりました。ご返信ありがとうございました。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/4/1 17:04:39
System.Data.OracleClient の利用は避けてください。
https://docs.microsoft.com/ja-jp/dotnet/api/system.data.oracleclient.oracleexception

上記は Oracle Client 8.1.7 以降を必要としますが、.NET 2.0 以降では Oracle 純正のライブラリの
仕様が推奨されており、.NET 4.0 以降では、System.Data.OracleClient 自体が非推奨になっています。


そして、Oracle 純正の Managed / Unmanaged な ODP.NET の OracleException では、
Code ではなく Number を用いるようです。
https://docs.oracle.com/cd/E57425_01/121/ODPNT/OracleExceptionClass.htm