Oracle® Data Provider for .NET開発者ガイド ODAC 12c リリース4 (12.1.0.2) for Microsoft Windows E72575-01 |
|
![]() 前 |
![]() 次 |
OracleException
クラスは、Oracle Data Provider for .NETでエラーが発生したときに表示される例外を表します。各OracleException
オブジェクトには、エラーまたは警告について説明するError
プロパティ内のOracleError
オブジェクトが少なくとも1つ含まれます。
クラスの継承
System.Object
System.Exception
System.SystemException
System.Runtime.InteropServices.ExternalException
System.Data.Common.DbException
Oracle.DataAccess.Client.OracleException
宣言
// C# public sealed class OracleException : SystemException
要件
プロバイダ | ODP.NET管理対象外ドライバ | ODP.NET管理対象ドライバ |
アセンブリ | Oracle.DataAccess.dll |
Oracle.ManagedDataAccess.dll |
ネームスペース | Oracle.DataAccess.Client |
Oracle.ManagedDataAccess.Client |
.NET Framework | 3.5, 4.0, 4.5, 4.6 | 4.0, 4.5, 4.6 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
複数のエラーがある場合、ODP.NETはスタックの最初のエラー・メッセージのみを戻します。
例
// C# using System; using System.Data; using Oracle.DataAccess.Client; class OracleExceptionSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Create an OracleCommand object using the connection object OracleCommand cmd = con.CreateCommand(); try { cmd.CommandText = "insert into notable values (99, 'MyText')"; cmd.ExecuteNonQuery(); } catch (OracleException ex) { Console.WriteLine("Record is not inserted into the database table."); Console.WriteLine("Exception Message: " + ex.Message); Console.WriteLine("Exception Source: " + ex.Source); } } }
OracleException
メンバーは次の表にリストされています。
OracleException静的メソッド
OracleException
静的メソッドを、表6-77にリストします。
OracleExceptionプロパティ
OracleException
プロパティを、表6-78にリストします。
表6-78 OracleExceptionプロパティ
プロパティ | 説明 |
---|---|
Oracleインスタンスへの接続の情報を含むTNS名を指定します |
|
Oracle Databaseによって生成される例外に関する情報を含む、1つ以上の |
|
|
|
|
|
この例外を発生させた現行の操作の再試行が成功するかどうかを指定します |
|
例外時に出されるエラー・メッセージを指定します |
|
Oracleのエラー番号を指定します |
|
トランザクション・ガードを使用している際に、リカバリ可能エラーのために |
|
例外を引き起こすストアド・プロシージャを指定します |
|
エラーを生成するデータ・プロバイダの名前を指定します |
|
|
|
|
|
OracleExceptionメソッド
OracleException
メソッドを、表6-79にリストします。
OracleException
プロパティを、表6-81にリストします。
表6-81 OracleExceptionプロパティ
プロパティ | 説明 |
---|---|
Oracleインスタンスへの接続の情報を含むTNS名を指定します |
|
Oracle Databaseによって生成される例外に関する情報を含む、1つ以上の |
|
|
|
|
|
この例外を発生させた現行の操作の再試行が成功するかどうかを指定します |
|
例外時に出されるエラー・メッセージを指定します |
|
Oracleのエラー番号を指定します |
|
|
トランザクション・ガードを使用している際に、リカバリ可能エラーのために |
例外を引き起こすストアド・プロシージャを指定します |
|
エラーを生成するデータ・プロバイダの名前を指定します |
|
|
|
|
|
このプロパティは、Oracleインスタンスへの接続の情報を含むTNS名を指定します。
宣言
// C# public string DataSource {get;}
プロパティ値
接続情報を含むTNS名
このプロパティは、Oracle Databaseによって生成される例外に関する情報を含む、1つ以上のOracleError
オブジェクトのコレクションを指定します。
宣言
// C# public OracleErrorCollection Errors {get;}
プロパティ値
OracleErrorCollection
備考
Errors
プロパティにはOracleError
オブジェクトの、少なくとも1つのインスタンスが含まれます。
このプロパティは、この例外を発生させた現行の操作の再試行が成功するかどうかを指定します。
宣言
// C# public bool IsRecoverable {get;}
プロパティ値
bool
。
備考
データベースがネットワーク障害などで停止すると、セッションは使用不可になり、クライアントはエラー・コードを受信します。クライアントでは、進行中の操作がコミットされたか、または再送信する必要があるかについての判断が困難である可能性があります。Oracleでは、進行中のデータベース操作をリカバリできるかどうかについて、IsRecoverable
プロパティを使用して自動的に判断します。停止後にIsRecoverable
がtrueを戻した場合、アプリケーションは現行の操作ステータスを取得してトランザクションを完了できます。IsRecoverable
がfalseを戻した場合、アプリケーションは現行の操作をロールバックしてトランザクションを再送信できます。
このプロパティは、トランザクション・ガードと組み合せてよく使用されます。
Exception
をオーバーライドします
このプロパティは、例外時に出されるエラー・メッセージを指定します。
宣言
// C# public override string Message {get;}
プロパティ値
string
。
備考
Message
はErrors
コレクションの全エラーを連結したものです。各エラー・メッセージは連結され、最後の1つ以外は改行で繋げられます。
このプロパティはOracleのエラー番号を指定します。
宣言
// C# public int Number {get;}
プロパティ値
エラー番号
備考
このエラー番号は、Oracleによって生成されたエラーの最上位レベルであり、プロバイダ固有のエラー番号である可能性があります。
このプロパティは、トランザクション・ガードを使用する際に、リカバリ可能エラーのためにOracleLogicalTransaction
オブジェクトを戻します。
宣言
// C# public OracleLogicalTransaction OracleLogicalTransaction {get;}
プロパティ値
OracleLogicalTransaction
。
備考
次の両方の条件に合致する場合、OracleLogicalTransaction
はnull以外です。
トランザクション・ガードがサービス上で使用可能
例外がリカバリ可能エラー
OracleLogicalTransaction
は、表示している次の2つのプロパティを検証することで、トランザクション結果の判断に使用できます: Committed
およびUserCallCompleted
。結果が不明の場合、Committed
およびUserCallCompleted
はnullに設定されます。
リカバリ可能なエラーがODP.NETによって判定できず、接続が分散トランザクションに参加していない場合、OracleLogicalTransaction
オブジェクトのOracleLogicalTransactionId
プロパティはnull以外になり、データベース/サービスが稼働している場合、アプリケーションが明示的にOracleLogicalTransaction.GetOutcome
スタティック・メソッドを呼び出すことで結果を判断するのに使用できます。
このプロパティは、例外を引き起こす、格納されたプロシージャを指定します。
宣言
// C# public string Procedure {get;}
プロパティ値
格納されたプロシージャ名
OracleException
メソッドを、表6-82にリストします。
表6-82 OracleExceptionメソッド
メソッド | 説明 |
---|---|
|
|
|
|
|
System. |
例外に関する情報でシリアル化可能な |
|
|
|
この例外の完全修飾名を戻します |
Exception
をオーバーライドします
このメソッドにより、例外に関する情報で、シリアル化可能なinfo
オブジェクトを設定します。
宣言
// C# public override void GetObjectData(SerializationInfo info, StreamingContext context);
パラメータ
info
SerializationInfo
オブジェクト
context
StreamingContext
オブジェクト
備考
この情報には、DataSource
、Message
、Number
、Procedure
、Source
およびStackTrace
が含まれます。
Exception
をオーバーライドします
このメソッドにより、この例外の完全修飾名、Message
プロパティのerror
メッセージ、InnerException.ToString()
メッセージおよびスタック・トレースを戻します。
宣言
// C# public override string ToString();
戻り値
例外の文字列表現
例
// C# using System; using Oracle.DataAccess.Client; class ToStringSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Create an OracleCommand object using the connection object OracleCommand cmd = con.CreateCommand(); try { cmd.CommandText = "insert into notable values (99, 'MyText')"; cmd.ExecuteNonQuery(); // This will throw an exception } catch (OracleException ex) { Console.WriteLine("Record is not inserted into the database table."); Console.WriteLine("ex.ToString() : " + ex.ToString()); } } }