OracleConnection
オブジェクトは、Oracleデータベースへの接続を表します。
クラスの継承
System.Object
System.MarshalByRefObject
System.ComponentModel.Component
System.Data.Common.DbConnection
(ADO.NET 2.0のみ)
Oracle.DataAccess.Client.OracleConnection
宣言
// ADO.NET 2.0: C# public sealed class OracleConnection : DbConnection, IDbConnection, ICloneable
// ADO.NET 1.x: C#
public sealed class OracleConnection : Component, IdbConnection, ICloneable
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
例
// C# using System; using System.Data; using Oracle.DataAccess.Client; class OracleConnectionSample { static void Main() { // Connect string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Execute a SQL SELECT OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select * from emp"; OracleDataReader reader = cmd.ExecuteReader(); // Print all employee numbers while (reader.Read()) Console.WriteLine(reader.GetInt32(0)); // Clean up reader.Dispose(); cmd.Dispose(); con.Dispose(); } }
要件
ネームスペース: Oracle.DataAccess.Client
アセンブリ: Oracle.DataAccess.dll
Microsoft .NET Frameworkバージョン: 1.xまたは2.0
OracleConnection
メンバーは、次の表にリストされています。
OracleConnectionコンストラクタ
OracleConnection
コンストラクタのリストを、表5-17に示します。
OracleConnection静的プロパティ
OracleConnection
静的プロパティのリストを、表5-19に示します。
OracleConnection静的メソッド
OracleConnection
静的メソッドのリストを、表5-19にリストします。
OracleConnectionプロパティ
OracleConnection
プロパティのリストを、表5-20に示します。
表5-20 OracleConnectionプロパティ
名前 | 説明 |
---|---|
|
接続のクライアント識別子を指定します |
Oracleデータベースへの接続に使用される接続情報を指定します |
|
|
|
|
|
|
サポート対象外 |
|
接続するデータベースを識別するOracle Netサービス名、接続記述子または簡易接続ネーミングを指定します |
|
|
|
|
接続の現在の状態を指定します |
OracleConnectionパブリック・メソッド
OracleConnection
パブリック・メソッドのリストを、表5-21に示します。
表5-21 OracleConnectionパブリック・メソッド
パブリック・メソッド | 説明 |
---|---|
ローカル・トランザクションを開始します(オーバーロード) .NETストアド・プロシージャではサポートされません |
|
サポート対象外 |
|
|
.NETストアド・プロシージャではサポートされません |
|
データベース接続をクローズします |
|
|
|
|
|
|
|
アプリケーションによって、指定された分散トランザクションに明示的に登録できるようにします .NETストアド・プロシージャではサポートされません |
|
アプリケーションによって、指定された分散トランザクションに登録できるようにします ADO.NET 2.0準拠のODP.NETでのみサポート .NETストアド・プロシージャではサポートされません |
|
|
|
|
|
|
|
ADO.NET 2.0準拠のODP.NETでのみサポート |
セッションのグローバリゼーションの設定を表す |
|
|
|
|
|
|
|
新規パスワードで新規接続をオープンします .NETストアド・プロシージャではサポートされません |
|
|
文キャッシングが有効な場合、データベースでオープンしているすべてのカーソルをクローズし、文キャッシュをフラッシュします |
セッションのグローバリゼーションの設定を |
|
|
|
OracleConnectionイベント
OracleConnection
イベントのリストを、表5-22に示します。
表5-22 OracleConnectionイベント
イベント名 | 説明 |
---|---|
|
|
Oracleフェイルオーバーが発生するときにトリガーされるイベント .NETストアド・プロシージャではサポートされません |
|
すべてのメッセージにトリガーされるイベントまたはデータベースにより送信される警告 |
|
接続の状態が変更されたときにトリガーされるイベント |
OracleConnection
コンストラクタはOracleConnection
クラスの新規インスタンスをインスタンス化します。
オーバーロード・リスト:
このコンストラクタは、デフォルト・プロパティ値を使用してOracleConnection
クラスの新規インスタンスをインスタンス化します。
このコンストラクタは、指定された接続文字列とともにOracleConnection
クラスの新規インスタンスをインスタンス化します。
このコンストラクタは、デフォルト・プロパティ値を使用してOracleConnection
クラスの新規インスタンスをインスタンス化します。
宣言
// C# public OracleConnection();
備考
OracleConnection
のプロパティは次のデフォルト値に設定されます。
ConnectionString
= 空の文字列
ConnectionTimeout
= 15
(暗黙的なデータベース接続にはデフォルト値の0
が使用されます)
DataSource
= 空の文字列
ServerVersion
= 空の文字列
このコンストラクタは、指定された接続文字列とともにOracleConnection
クラスの新規インスタンスをインスタンス化します。
宣言
// C#
public OracleConnection(String connectionString);
パラメータ
connectionString
接続情報は、Oracleデータベースへの接続に使用されます。
備考
ConnectionString
プロパティは、指定されたconnectionString
に設定されます。ConnectionString
プロパティは解析され、無効な接続文字列属性または属性値が含まれる場合は、例外がスローされます。
OracleConnection
オブジェクトのプロパティは、接続文字列により設定されない場合は、次の値をデフォルトとします。
ConnectionString
= 空の文字列
ConnectionTimeout
= 15
(暗黙的なデータベース接続にはデフォルト値の0
が使用されます)
DataSource
= 空の文字列
ServerVersion
= 空の文字列
OracleConnection
静的プロパティのリストを、表5-23にリストします。
このプロパティは、暗黙的なデータベース接続が使用できるかどうかを示します。
宣言
// C# public static bool IsAvailable {get;}
プロパティ値
暗黙的なデータベース接続が使用できる場合はtrue
を戻します。
備考
暗黙的なデータベース接続の可用性は、実行時にこの静的プロパティを使用して確認できます。Oracle Data Provider for .NETが.NETストアド・プロシージャ内で使用されている場合、このプロパティは常にtrue
を戻します。それ以外の場合は、false
が戻されます。
暗黙的なデータベース接続を表すOracleConnectionオブジェクトを.NETストアド・プロシージャで取得するには、OracleConnection
オブジェクトのConnectionString
プロパティを"context
connection=true"
に設定し、Open
メソッドを起動します。
明示的なユーザー接続に使用できるすべての機能を暗黙的なデータベース接続に使用できるわけではないことに注意してください。詳細は、「暗黙的データベース接続」を参照してください。
例
// C# (Library/DLL) using System; using Oracle.DataAccess.Client; public class IsAvailableSample { static void MyStoredProcedure() { OracleConnection con = new OracleConnection(); if (OracleConnection.IsAvailable) { // This function is invoked as a stored procedure // Obtain the implicit database connection by setting // "context connection=true" in the connection string con.ConnectionString = "context connection=true"; } else { // This function is not invoked as a stored procedure // Set the connection string for a normal client connection con.ConnectionString = "user id=scott;password=tiger;data source=oracle"; } con.Open(); Console.WriteLine("connected!"); } }
OracleConnection
静的メソッドのリストを、表5-24にリストします。
このメソッドは、指定されたOracleConnection
オブジェクトに関連付けられている接続プールを消去します。
宣言
// C# public static void ClearPool(OracleConnection connection);
備考(Oracle.DataAccess.Clientのみ)
このメソッドが起動されると、すべてのアイドル接続がクローズされてプールから解放されます。 現在使用中の接続はそのまま使用可能で、ユーザーがOracleConnection
オブジェクトに対してClose()
を起動したときにプールに戻されます。
接続プールは、このメソッドが起動されると使用可能になります。 したがって、接続要求はこのメソッドの起動後も正常に処理されます。 このメソッドの起動後に作成される接続は、もう一度起動を実行しないかぎり消去されません。
このメソッドは、ConnectionString
が正しく設定されていれば、接続をオープンする前後いずれでもOracleConnection
オブジェクトに対して起動できます。
例外
InvalidOperationException
: 接続プールが見つからないか、指定された接続文字列が無効です。
例(Oracle.DataAccess.Clientのみ)
// C# // Sample demonstrating the use of ClearPool API in OracleConnection class using System; using Oracle.DataAccess.Client; class ClearPoolSample { static void Main() { Console.WriteLine("Running ClearPool sample..." ); // Set the connection string string strConn = "User Id=scott;Password=tiger;Data Source=oracle;" + "Min pool size=5;"; OracleConnection conn = new OracleConnection(strConn); // Open the connection conn.Open(); // Clears the connection pool associated with connection 'conn' OracleConnection.ClearPool (conn); // This connection will be placed back into the pool conn.Close (); // Open the connection again to create additional connections in the pool conn.Open(); // Create a new connection object OracleConnection connNew = new OracleConnection(strConn); // Clears the pool associated with Connection 'connNew' // Since the same connection string is set for both the connections, // connNew and conn, they will be part of the same connection pool. // We need not do an Open() on the connection object before calling // ClearPool OracleConnection.ClearPool (connNew); // cleanup conn.Close(); Console.WriteLine("Done!"); } }
これを表に追加して、クライアントのみによるサポートを含めます。
このメソッドは、すべての接続プールからすべての接続を消去します。
宣言
// C# public static void ClearAllPools();
備考(Oracle.DataAccess.Clientのみ)
この呼出しは、アプリケーション用に作成されたすべての接続プールに対するClearPool
の呼出しと類似しています。
例外
InvalidOperationException
: アプリケーションに対する接続プールが見つかりません。
例
// C# // Sample demonstrating the use of ClearAllPools API in OracleConnection class using System; using Oracle.DataAccess.Client; class ClearAllPoolsSample { static void Main() { Console.WriteLine("Running ClearAllPools sample..." ); // Set the connection string string strConn = "User Id=scott;Password=tiger;Data Source=oracle;" + "Min pool size=5;"; OracleConnection conn = new OracleConnection(strConn); // Create another connection object with a different connection string string strConnNew = "User Id=scott;Password=tiger;Data Source=oracle;"; OracleConnection connNew = new OracleConnection(strConnNew); // Open the connections. Separate pools are created for conn and connNew conn.Open(); connNew.Open(); // Clears the pools associated with conn and connNew OracleConnection.ClearAllPools (); // cleanup conn.Close(); connNew.Close(); Console.WriteLine("Done!"); } }
OracleConnection
プロパティのリストを、表5-25に示します。
表5-25 OracleConnectionプロパティ
名前 | 説明 |
---|---|
|
接続のクライアント識別子を指定します |
Oracleデータベースへの接続に使用される接続情報を指定します |
|
|
|
|
|
|
サポート対象外 |
|
接続するデータベースを識別するOracle Netサービス名、接続記述子または簡易接続ネーミングを指定します |
|
|
|
|
接続の現在の状態を指定します |
このプロパティでは、接続のクライアント識別子を指定します。
宣言
// C# public string ClientId {set;}
プロパティ値
クライアント識別子として使用される文字列
備考
デフォルト値はnull
です。
ClientId
をnull
に設定すると、接続のクライアント識別子がリセットされます。ClientId
を空の文字列に設定すると、接続のクライアント識別子が空の文字列に設定されます。OracleConnection
オブジェクトでClose
メソッドがコールされると、ClientId
はnull
に設定されます。
ClientId
プロパティを使用すると、アプリケーションでODP.NETを使用する各データベース・セッションに対してアプリケーション・コンテキスト内にクライアント識別子を設定できます。これによりODP.NET開発者は、Oracle Virtual Private Database(VPD)をより簡単に構成できるようになります。
参照: |
このプロパティは、Oracleデータベースへの接続に使用される接続情報を指定します。
宣言
// ADO.NET 2.0: C# public override string ConnectionString{get; set;}
// ADO.NET: 1.x C#
public string ConnectionString{get; set;}
プロパティ値
接続文字列がコンストラクタを介して指定される場合、このプロパティはその文字列に設定されます。
実装
IDbConnection
例外
ArgumentException
: 無効な構文が接続文字列に指定されました。
InvalidOperationException
: ConnectionString
が接続がオープン中に設定されました。
備考
デフォルト値が空の文字列です。
ConnectionString
は、セミコロンで区切られた属性名と値のペアにする必要があります。次に例を示します。
"User Id=scott;password=tiger;data source=oracle"
ConnectionString
の形式が正しくない場合、例外がスローされます。二重引用符で囲まれていない場合、すべてのスペースは無視されます。
ConnectionString
プロパティが設定されている場合、OracleConnection
オブジェクトはすぐに文字列のエラーを解析します。ArgumentException
は、ConnectionString
に無効な属性または無効な値が含まれている場合に、スローされます。User
Id
、Password
、Proxy
User
Id
、Proxy
Password
、およびData
Source
(提供されている場合)の属性値は、Open
メソッドがコールされるまで検証されません。
接続はクローズして、ConnectionString
プロパティに設定する必要があります。ConnectionString
プロパティがリセットされる場合、事前に設定された値は、新しい値が適用される前にそれぞれのデフォルト値に再初期化されます。
Oracleデータベースでは、大文字と小文字を区別してユーザー名を使用できる機能がサポートされています。たとえば、「MySchema
」のように大文字と小文字が使用されている名前のユーザーとして接続するには、User
Id
属性値は次のように二重引用符で囲む必要があります。
"User Id=\"MySchema\";Password=MYPASSWORD;Data Source=oracle"
しかし、Oracleユーザー名がすべて大文字の場合、二重引用符で囲まれたUser
Id
は接続時にすべて大文字に変換されるため、User
Id
接続文字列属性は、ユーザー名を二重引用符で囲まずに設定できます。一重引用符は、サポートされていません。
詳細な例は、「例」を参照してください。
接続文字列属性が2回以上設定されている場合、最新の設定が実行され、例外はスローされません。
ブール接続文字列属性は、true
、false
、yes
またはno
のいずれかに設定できます。
備考(.NETストアド・プロシージャ)
暗黙的なデータベース接続を表すOracleConnectionオブジェクトを.NETストアド・プロシージャで取得するには、OracleConnection
オブジェクトのConnectionString
プロパティを"context
connection=true"
に設定し、Open
メソッドを起動します。"context
connection"
がtrueに設定されている場合、その他の接続文字列属性を一緒に使用することはできません。
サポートされている接続文字列属性
表5-26に、サポートされている接続文字列の属性リストを示します。
表5-26 サポートされている接続文字列の属性
例
このコード例は、二重引用符で囲まれていないかぎり保持されないUser
Id
属性値の事例を示しています。またこの例では、接続プールが作成された場合および接続が接続プールから取り出された場合も説明しています。
/* Database Setup: Log on as SYS or SYSTEM that has CREATE USER privilege. grant connect, resource to "MYSCHEMA" identified by MYPWD; grant connect, resource to "MySchema" identified by MYPWD; */ // C# using System; using Oracle.DataAccess.Client; class ConnectionStringSample { static long GetSID(OracleConnection con) { OracleCommand cmd = new OracleCommand(); cmd.Connection = con; cmd.CommandText = "select SYS_CONTEXT('USERENV','SID') from dual"; object sid = cmd.ExecuteScalar(); return Convert.ToInt32(sid); } static void Main() { // To demonstrate whether a connection is obtained from the same // connection pool or not, we check the SID (session id). If the // session IDs of two connections are the same, that would indicate // that the connection is the same and hence the connection was // obtained from the same connection pool. // If the session IDs are different, it could potentially mean that a // different connection was obtained from the same connection pool or // a different connection is obtained from a different connection pool. // However, since the sample always places the connection // back into the pool by disposing it before requesting another // connection, a connection with the same ID will be obtained again // if a connection is requested from the same connection pool. string constr1 = "User Id=myschema;Password=mypwd;Data Source=oracle"; string constr2 = "User Id=MySchema;Password=MyPwd;Data Source=oracle"; string constr3 = "User Id=\"MYSCHEMA\";Password=MYPWD;Data Source=oracle"; string constr4 = "User Id=\"MySchema\";Password=MYPWD;Data Source=oracle"; string constr5 = " User Id=myschema;Password=mypwd;Data Source=oracle; "; string constr6 = "User Id=myschema;Password=mypwd;Data Source=oracle;pooling=true"; long sid0, sid1; // Connect as "MYSCHEMA/MYPWD" // NOTE: the password is case insensitive // A new connection and a new connection pool X is created OracleConnection con1 = new OracleConnection(constr1); con1.Open(); sid0 = GetSID(con1); // Place connection back into connection pool X con1.Dispose(); // Connect as "MYSCHEMA/MYPWD" // The connection from pool X is obtained. No new connection created. OracleConnection con2 = new OracleConnection(constr2); con2.Open(); sid1 = GetSID(con2); if (sid1 == sid0) Console.WriteLine("con1 and con2 are from the same connection pool"); else Console.WriteLine("con1 and con2 are from different connection pools"); // Place connection back into connection pool X con2.Dispose(); // Connect as "MYSCHEMA/MYPWD" // The connection from pool X is obtained. No new connection created. OracleConnection con3 = new OracleConnection(constr3); con3.Open(); sid1 = GetSID(con3); if (sid1 == sid0) Console.WriteLine("con1 and con3 are from the same connection pool"); else Console.WriteLine("con1 and con3 are from different connection pools"); // Place connection back into connection pool X con3.Dispose(); // Connect as "MySchema/MYPWD" // A new connection and connection pool Y is created OracleConnection con4 = new OracleConnection(constr4); con4.Open(); sid1 = GetSID(con4); if (sid1 == sid0) Console.WriteLine("con1 and con4 are from the same connection pool"); else Console.WriteLine("con1 and con4 are from different connection pools"); // Place connection back into connection pool Y con4.Dispose(); // Connect as "MYSCHEMA/MYPWD" // The connection from pool X is obtained // Extra spaces or semi-colons in the connection string do not force // new pools to be created OracleConnection con5 = new OracleConnection(constr5); con5.Open(); sid1 = GetSID(con5); if (sid1 == sid0) Console.WriteLine("con1 and con5 are from the same connection pool"); else Console.WriteLine("con1 and con5 are from different connection pools"); // Place connection back into connection pool X con5.Dispose(); // Connect as "MYSCHEMA/MYPWD" // A connection is obtained from Connection Pool X. // It's important to note that different connection strings do // not necessarily mean that ODP.NET will create different // connection pools for them. In other words, ODP.NET does not // use exact string matching algorithm to determine whether // a new connection pool needs to be created or not. // Instead, it creates connection pools based on the uniqueness // of attribute values settings in the connection string. OracleConnection con6 = new OracleConnection(constr6); con6.Open(); sid1 = GetSID(con6); if (sid1 == sid0) Console.WriteLine("con1 and con6 are from the same connection pool"); else Console.WriteLine("con1 and con6 are from different connection pools"); // Place connection back into connection pool X con6.Dispose(); } }
このプロパティは、Open
メソッドが要求を終了する前にプールされた接続の取得に要する最大時間を指定します。
宣言
// ADO.NET 2.0: C# public override int ConnectionTimeout {get;}
// ADO.NET 1.x: C#
public int ConnectionTimeout {get;}
プロパティ値
プールされた接続要求に対する有効な最大時間(秒)
実装
IDbConnection
備考
デフォルト値は15
このプロパティを0
に設定すると、プールされた接続要求は使用可能な接続を時間制限なしで待機できます。タイムアウトはプールされた接続要求に対して有効となりますが、新規接続要求に対しては有効にはなりません。
備考(.NETストアド・プロシージャ)
アプリケーションによって指定された接続文字列がなく、暗黙的なデータベースでの接続が常に使用可能であるため、このプロパティは0
に設定されます。
このプロパティは、サポートされていません。
宣言
// ADO.NET 2.0: C# public override string Database {get;}
// ADO.NET 1.x: C#
public string Database {get;}
プロパティ値
文字列
実装
IDbConnection.Database
備考
このプロパティは、サポートされていません。これは常に空の文字列を戻します。
このプロパティは、接続するデータベースを識別するOracle Netサービス名、接続記述子または簡易接続ネーミングを指定します
宣言
// ADO.NET 2.0: C# public override string DataSource {get;}
// ADO.NET 1.x: C#
public string DataSource {get;}
プロパティ値
接続するデータベースを識別するOracle Netサービス名、接続記述子または簡易接続ネーミング。
備考(.NETストアド・プロシージャ)
暗黙的なデータベース接続の場合、このプロパティの値は常に空の文字列です。
このプロパティは、OracleConnection
が接続を確立するOracleデータベースのバージョン番号を指定します。
宣言
// ADO.NET 2.0: C# public override string ServerVersion {get;}
// ADO.NET 1.x: C#
public string ServerVersion {get;}
プロパティ値
Oracleデータベースのバージョン
例外
InvalidOperationException
: 接続がクローズされています。
備考
デフォルトは空の文字列です。
このプロパティは、接続の現在の状態を指定します。
宣言
// ADO.NET 2.0: C# public override ConnectionState State {get;}
// ADO.NET 1.x: C#
public ConnectionState State {get;}
プロパティ値
接続のConnectionState
実装
IDbConnection
備考
ODP.NETでは、このプロパティに対してConnectionState.Closed
およびConnectionState.Open
がサポートされています。デフォルト値は、ConnectionState.Closed
です。
OracleConnection
パブリック・メソッドのリストを、表5-27に示します。
表5-27 OracleConnectionパブリック・メソッド
パブリック・メソッド | 説明 |
---|---|
ローカル・トランザクションを開始します(オーバーロード) .NETストアド・プロシージャではサポートされません |
|
サポート対象外 |
|
|
.NETストアド・プロシージャではサポートされません |
|
データベース接続をクローズします |
|
|
|
|
|
|
|
アプリケーションによって、指定された分散トランザクションに明示的に登録できるようにします .NETストアド・プロシージャではサポートされません |
|
アプリケーションによって、指定された分散トランザクションに登録できるようにします ADO.NET 2.0準拠のODP.NETでのみサポート .NETストアド・プロシージャではサポートされません |
|
|
|
|
|
|
|
ADO.NET 2.0準拠のODP.NETでのみサポート |
セッションのグローバリゼーションの設定を表す |
|
|
|
|
|
|
|
新規パスワードで新規接続をオープンします .NETストアド・プロシージャではサポートされません |
|
|
文キャッシングが有効な場合、データベースでオープンしているすべてのカーソルをクローズし、文キャッシュをフラッシュします |
セッションのグローバリゼーションの設定を |
|
|
|
BeginTransaction
メソッドは、ローカル・トランザクションを開始します。
オーバーロード・リスト
このメソッドは、ローカル・トランザクションを開始します。
BeginTransaction(IsolationLevel)
このメソッドは、ローカル・トランザクションを指定された分離レベルで開始します。
このメソッドは、ローカル・トランザクションを開始します。
宣言
// C# public OracleTransaction BeginTransaction();
戻り値
OracleTransaction
オブジェクトは、新規トランザクションを表します。
実装
IDbConnection
例外
InvalidOperationException
: トランザクションはすでに開始されています。
備考
トランザクションは、分離レベルで作成され、IsolationLevel.ReadCommitted
のデフォルト値に設定されます。トランザクションに関連するすべての後続の操作は、戻されたOracleTransaction
オブジェクトで実行する必要があります。
備考(.NETストアド・プロシージャ)
このメソッドを使用すると、未サポートの例外が発生します。
このメソッドは、ローカル・トランザクションを指定された分離レベルで開始します。
宣言
// C#
public OracleTransaction BeginTransaction(IsolationLevel isolationLevel);
パラメータ
isolationLevel
新規トランザクションの分離レベル
戻り値
OracleTransaction
オブジェクトは、新規トランザクションを表します。
実装
IDbConnection
例外
InvalidOperationException
: トランザクションはすでに開始されています。
ArgumentException
: 指定したisolationLevel
値が無効です。
備考
次の2つの分離レベルがサポートされています。
IsolationLevel.ReadCommitted
IsolationLevel.Serializable
他の分離レベルを要求すると、例外が発生します。
備考(.NETストアド・プロシージャ)
このメソッドを使用すると、未サポートの例外が発生します。
例
// C# using System; using System.Data; using Oracle.DataAccess.Client; class BeginTransactionSample { 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(); // Start a transaction OracleTransaction txn = con.BeginTransaction(IsolationLevel.ReadCommitted); // Update EMP table cmd.CommandText = "update emp set sal = sal + 100"; cmd.ExecuteNonQuery(); // Rollback transaction txn.Rollback(); Console.WriteLine("Transaction rolledback"); // Clean up txn.Dispose(); cmd.Dispose(); con.Dispose(); } }
このメソッドは、サポートされていません。
宣言
// ADO.NET 2.0: C#
public override void ChangeDatabase(string databaseName);
// ADO.NET 1.x: C# public void ChangeDatabase(string databaseName);
パラメータ
databaseName
現行のデータベース名を置き換えるデータベースの名前
実装
IDbConnection.ChangeDatabase
例外
NotSupportedException
: メソッドはサポートされていません。
備考
このメソッドはサポートされておらず、起動されるとNotSupportedException
をスローします。
このメソッドは、OracleConnection
オブジェクトのコピーを作成します。
宣言
// C# public object Clone();
戻り値
OracleConnection
オブジェクト
実装
ICloneable
備考
複製されたオブジェクトのプロパティ値は、複製元のオブジェクトのプロパティ値と同じです。
備考(.NETストアド・プロシージャ)
このメソッドは、暗黙的なデータベース接続ではサポートされていません。
例
// C# using System; using Oracle.DataAccess.Client; class CloneSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Need a proper casting for the return value when cloned OracleConnection clonedCon = (OracleConnection)con.Clone(); // Cloned connection is always closed, regardless of its source, // But the connection string should be identical clonedCon.Open(); if (clonedCon.ConnectionString.Equals(con.ConnectionString)) Console.WriteLine("The connection strings are the same."); else Console.WriteLine("The connection strings are different."); // Close and Dispose OracleConnection object clonedCon.Dispose(); } }
このメソッドは、データベースへの接続をクローズします。
宣言
// ADO.NET 2.0: C# public override void Close();
// ADO.NET 1.x: C#
public void Close();
実装
IDbConnection
備考
次を実行します。
すべての保留中のトランザクションをロール・バックします。
接続プーリングが有効な場合、接続を接続プールに配置します。接続プーリングが有効な場合でも、接続が接続文字列に指定された接続存続期間を超える場合、その接続はクローズできます。接続プーリングが無効な場合、接続はクローズされます。
データベースへの接続をクローズします。
接続は、Open()
を使用して再オープンできます。
このメソッドは、OracleConnection
オブジェクトに関連付けられたOracleCommand
オブジェクトを作成して戻します。
宣言
// C# public OracleCommand CreateCommand();
戻り値
OracleCommand
オブジェクト
実装
IDbConnection
例
// C# using System; using System.Data; using Oracle.DataAccess.Client; class CreateCommandSample { static void Main() { // Connect string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Execute a SQL SELECT OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select * from emp"; OracleDataReader reader = cmd.ExecuteReader(); // Print all employee numbers while (reader.Read()) Console.WriteLine(reader.GetInt32(0)); // Clean up reader.Dispose(); cmd.Dispose(); con.Dispose(); } }
このメソッドにより、アプリケーションは接続がオープンされた後に特定の分散トランザクションに明示的に登録できます。
宣言
// C#
public void EnlistDistributedTransaction(ITransaction transaction);
パラメータ
transaction
ITransaction
インタフェース
例外
InvalidOperationException
- 接続がローカル・トランザクションの一部であるか、または接続がクローズされています。
備考
EnlistDistributedTransaction
により、メソッドに渡された特定のトランザクションにオブジェクトを登録できます。ITransaction
インタフェースは、分散トランザクションを開始したコンポーネント内でContexUtil.Transaction
プロパティに(ITransaction
)キャストを適用することで取得できます。
このメソッドを呼び出す前に接続がオープンされている必要があります。そうしないとInvalidOperationException
がスローされます。
接続が、分散トランザクションに登録を試みている最中に暗黙的または明示的に開始されたローカル・トランザクションの一部である場合、ローカル・トランザクションはロールバックされ、例外がスローされます。
デフォルトでは、メソッド・レベルのAutoComplete
宣言が設定されていないかぎり、分散トランザクションはロールバックされます。
ITranasction
に対してコミットを起動すると例外が発生します。
ITranasction
メソッドに対してロールバックを起動し、同一分散トランザクションに対してContextUtil.SetComplete
を呼び出すと、例外が発生します。
備考(.NETストアド・プロシージャ)
このメソッドを使用すると、未サポートの例外が発生します。
例
アプリケーション:
// C# /* This is the class that will utilize the Enterprise Services component. This module needs to be built as an executable. The Enterprise Services Component DLL must be built first before building this module. In addition, the DLL needs to be referenced appropriately when building this application. */ using System; using System.EnterpriseServices; using DistribTxnSample; class DistribTxnSample_App { static void Main() { DistribTxnSample_Comp comp = new DistribTxnSample_Comp(); comp.DoWork(); } }
コンポーネント:
// C# /* This module needs to be 1) built as a component DLL/Library 2) built with a strong name This library must be built first before the application is built. */ using System; using System.Data; using Oracle.DataAccess.Client; using System.EnterpriseServices; namespace DistribTxnSample { [Transaction(TransactionOption.RequiresNew)] public class DistribTxnSample_Comp : ServicedComponent { public void DoWork() { string constr = "User Id=scott;Password=tiger;Data Source=oracle;enlist=false"; OracleConnection con = new OracleConnection(constr); con.Open(); // Enlist in a distrubuted transaction con.EnlistDistributedTransaction((ITransaction)ContextUtil.Transaction); // Update EMP table OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "UPDATE emp set sal = sal + .01"; cmd.ExecuteNonQuery(); // Commit ContextUtil.SetComplete(); // Dispose OracleConnection object con.Dispose(); } } }
このメソッドは、指定されたトランザクションに接続を登録します。
ADO.NET 2.0準拠のODP.NETでのみサポート
宣言
// C#
public override void EnlistTransaction(Transaction transaction)
パラメータ
transaction
System.Transactions.Transaction
オブジェクト
例外
InvalidOperationException
- 接続がローカル・トランザクションの一部であるか、または接続がクローズされています。
備考
このメソッドを起動すると、指定されたトランザクション・パラメータにより指定された分散トランザクションに接続が即時登録されます。
OracleConnection
が、前に起動したEnlistTransaction
メソッドを完了していない分散トランザクションと関連付けられたままの場合、このメソッドの呼出しにより例外がスローされます。
一般に、分散トランザクションでの登録が正常に行われるためには、Open
メソッドを起動する前に"enlist"
接続文字列属性を"true"
または"dynamic"
のいずれかに設定する必要があります。 "enlist"
接続文字列属性を"true"
に設定すると、接続がトランザクション・コンテキスト内にあれば、Open
メソッドが呼び出されたときに暗黙的にその接続が登録されます。 "dynamic"
に設定すると、EnlistTransaction
またはEnlistDistributedTransaction
メソッドが呼び出されたときに接続を動的に分散トランザクションに登録できます。 "enlist"
属性を"false"
に設定するのは、接続が分散トランザクションに登録されることがない場合のみです。
GetSchema
メソッドは、OracleConnection
のデータ・ソースのスキーマ情報を戻します。
ADO.NET 2.0準拠のODP.NETでのみサポート
オーバーロード・リスト
このメソッドは、OracleConnection
のデータ・ソースのスキーマ情報を戻します。
GetSchema (string collectionName)
このメソッドは、コレクション名に指定された文字列を使用してOracleConnection
のデータ・ソースのスキーマ情報を戻します。
GetSchema (string collectionName, string[] restrictions)
このメソッドは、コレクション名に指定された文字列および制限値に指定された文字列配列を使用してOracleConnection
のデータ・ソースのスキーマ情報を戻します。
このメソッドは、OracleConnection
のデータ・ソースのスキーマ情報を戻します。
宣言
// ADO.NET 2.0: C# public override DataTable GetSchema();
戻り値
DataTable
オブジェクト
例外
InvalidOperationException
: 接続がクローズされています。
備考
このメソッドは、データベースから取得可能な各メタデータ・コレクションに対する行を含んだDataTable
オブジェクトを戻します。
このメソッドは、GetSchema(String)
メソッドの使用時にString値"MetaDataCollections"
を指定することに相当します。
例
// C# using System; using System.Data; using System.Data.Common; using Oracle.DataAccess.Client; class GetSchemaSample { static void Main(string[] args) { string constr = "User Id=scott; Password=tiger; Data Source=oracle;"; string ProviderName = "Oracle.DataAccess.Client"; DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName); using (DbConnection conn = factory.CreateConnection()) { try { conn.ConnectionString = constr; conn.Open(); //Get all the schema collections and write to an XML file. //The XML file name is Oracle.DataAccess.Client_Schema.xml DataTable dtSchema = conn.GetSchema(); dtSchema.WriteXml(ProviderName + "_Schema.xml"); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } } } }
このメソッドは、コレクション名に指定された文字列を使用してOracleConnection
のデータ・ソースのスキーマ情報を戻します。
宣言
// ADO.NET 2.0: C#
public override DataTable GetSchema (string collectionName);
パラメータ
collectionName
メタデータを必要とするコレクションの名前
戻り値
DataTable
オブジェクト
例外
ArgumentException
: 要求されたコレクションが定義されていません。
InvalidOperationException
: 接続がクローズされています。
InvalidOperationException
: 要求されたコレクションが、現行バージョンのOracleデータベースでサポートされていません。
InvalidOperationException
: 要求されたコレクションに対して移入文字列が指定されていません。
例
// C# using System; using System.Data; using System.Data.Common; using Oracle.DataAccess.Client; class GetSchemaSample { static void Main(string[] args) { string constr = "User Id=scott; Password=tiger; Data Source=oracle;"; string ProviderName = "Oracle.DataAccess.Client"; DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName); using (DbConnection conn = factory.CreateConnection()) { try { conn.ConnectionString = constr; conn.Open(); //Get MetaDataCollections and write to an XML file. //This is equivalent to GetSchema() DataTable dtMetadata = conn.GetSchema(DbMetaDataCollectionNames.MetaDataCollections); dtMetadata.WriteXml(ProviderName + "_MetaDataCollections.xml"); //Get Restrictions and write to an XML file. DataTable dtRestrictions = conn.GetSchema(DbMetaDataCollectionNames.Restrictions); dtRestrictions.WriteXml(ProviderName + "_Restrictions.xml"); //Get DataSourceInformation and write to an XML file. DataTable dtDataSrcInfo = conn.GetSchema(DbMetaDataCollectionNames.DataSourceInformation); dtDataSrcInfo.WriteXml(ProviderName + "_DataSourceInformation.xml"); //data types and write to an XML file. DataTable dtDataTypes = conn.GetSchema(DbMetaDataCollectionNames.DataTypes); dtDataTypes.WriteXml(ProviderName + "_DataTypes.xml"); //Get ReservedWords and write to an XML file. DataTable dtReservedWords = conn.GetSchema(DbMetaDataCollectionNames.ReservedWords); dtReservedWords.WriteXml(ProviderName + "_ReservedWords.xml"); //Get all the tables and write to an XML file. DataTable dtTables = conn.GetSchema("Tables"); dtTables.WriteXml(ProviderName + "_Tables.xml"); //Get all the views and write to an XML file. DataTable dtViews = conn.GetSchema("Views"); dtViews.WriteXml(ProviderName + "_Views.xml"); //Get all the columns and write to an XML file. DataTable dtColumns = conn.GetSchema("Columns"); dtColumns.WriteXml(ProviderName + "_Columns.xml"); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); } } } }
このメソッドは、コレクション名に指定された文字列および制限値に指定された文字列配列を使用してOracleConnection
のデータ・ソースのスキーマ情報を戻します。
宣言
// ADO.NET 2.0: C# public override DataTable GetSchema (string collectionName, string[] restrictions);
パラメータ
collectionName
取得するメタデータのコレクションの名前
restrictions
取得するメタデータに適用される制限事項の配列
戻り値
DataTable
オブジェクト
例外
ArgumentException
: 要求されたコレクションが定義されていません。
InvalidOperationException
: 次のいずれかの条件が存在します。
接続がクローズされています。
要求されたコレクションが、現行バージョンのOracleデータベースでサポートされていません。
要求されたコレクションでサポートされる以上の制限事項が指定されました。
要求されたコレクションに対して移入文字列が指定されていません。
備考
このメソッドでは、戻されたDataTable
のフィルタ処理のために、メタデータ・コレクションの名前および制限事項を指定したString値を使用します。 このメソッドは、指定されたメタデータ・コレクションから指定された制限事項に一致する行のみを含むDataTable
を戻します。
たとえばColumns
コレクションに3つの制限事項(owner
、tablename
およびcolumnname
)がある場合、スキーマに関係なくEMP
表のすべての列を取得するには、GetSchema
メソッドは最小限NULL、EMP
の値を渡す必要があります。
制限値が渡されない場合、その制限事項に対してデフォルト値が使用されますが、これはNULLを渡すことと同等です。 これは、パラメータ値に空の文字列を渡すのとは異なります。 この場合、空の文字列(""
)は指定されたパラメータの値とみなされます。
collectionName
では大/小文字を区別されませんが、制限事項(文字列値)では区別されます。
例
// C# using System; using System.Data; using System.Data.Common; using Oracle.DataAccess.Client; class GetSchemaSample { static void Main(string[] args) { string constr = "User Id=scott; Password=tiger; Data Source=oracle;"; string ProviderName = "Oracle.DataAccess.Client"; DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName); using (DbConnection conn = factory.CreateConnection()) { try { conn.ConnectionString = constr; conn.Open(); //Get Restrictions DataTable dtRestrictions = conn.GetSchema(DbMetaDataCollectionNames.Restrictions); DataView dv = dtRestrictions.DefaultView; dv.RowFilter = "CollectionName = 'Columns'"; dv.Sort = "RestrictionNumber"; for (int i = 0; i < dv.Count; i++) Console.WriteLine("{0} (default) {1}" , dtRestrictions.Rows[i]["RestrictionName"], dtRestrictions.Rows[i]["RestrictionDefault"]); //Set restriction string array string[] restrictions = new string[3]; //Get all columns from all tables owned by "SCOTT" restrictions[0] = "SCOTT"; DataTable dtAllScottCols = conn.GetSchema("Columns", restrictions); // clear collection for (int i = 0; i < 3; i++) restrictions[i] = null; //Get all columns from all tables named "EMP" owned by any //owner/schema restrictions[1] = "EMP"; DataTable dtAllEmpCols = conn.GetSchema("Columns", restrictions); // clear collection for (int i = 0; i < 3; i++) restrictions[i] = null; //Get columns named "EMPNO" from tables named "EMP", //owned by any owner/schema restrictions[1] = "EMP"; restrictions[2] = "EMPNO"; DataTable dtAllScottEmpCols = conn.GetSchema("Columns", restrictions); // clear collection for (int i = 0; i < 3; i++) restrictions[i] = null; //Get columns named "EMPNO" from all //tables, owned by any owner/schema restrictions[2] = "EMPNO"; DataTable dtAllEmpNoCols = conn.GetSchema("Columns", restrictions); } catch (Exception ex) { Console.WriteLine(ex.Message); Console.WriteLine(ex.Source); } } } }
GetSessionInfo
は、セッションのグローバリゼーションの設定を表すOracleGlobalization
オブジェクトを戻すか、またはリフレッシュします。
オーバーロード・リスト:
このメソッドは、セッションのグローバリゼーションの設定を表すOracleGlobalization
オブジェクトの新規インスタンスを戻します。
GetSessionInfo(OracleGlobalization)
このメソッドは、セッションのグローバリゼーションの設定とともに指定されたOracleGlobalization
オブジェクトをリフレッシュします。
このメソッドは、セッションのグローバリゼーションの設定を表すOracleGlobalization
オブジェクトの新規インスタンスを戻します。
宣言
// C# public OracleGlobalization GetSessionInfo();
戻り値
新規に作成されたOracleGlobalization
オブジェクト
例
// C# using System; using Oracle.DataAccess.Client; class GetSessionInfoSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Get session info from connection object OracleGlobalization info = con.GetSessionInfo(); // Update session info info.DateFormat = "YYYY-MM-DD"; con.SetSessionInfo(info); // Execute SQL SELECT OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select TO_CHAR(hiredate) from emp"; Console.WriteLine("Hire Date ({0}): {1}", info.DateFormat, cmd.ExecuteScalar()); // Clean up cmd.Dispose(); con.Dispose(); } }
このメソッドは、セッションのグローバリゼーションの設定とともに指定されたOracleGlobalization
オブジェクトをリフレッシュします。
宣言
// C#
public void GetSessionInfo(OracleGlobalization oraGlob);
パラメータ
oraGlob
更新されるOracleGlobalization
オブジェクト
このメソッドは、接続をOracleデータベースにオープンします。
宣言
// ADO.NET 2.0: C# public overide void Open();
// ADO.NET 1.x: C#
public void Open();
実装
IDbConnection
例外
ObjectDisposedException
: オブジェクトはすでに処理されています。
InvalidOperationException
: 接続がすでにオープンしているか、または接続文字列がNULLまたは空です。
備考
接続プーリングが有効な場合、接続がプールから取得されます。それ以外の場合は、新規接続が確立されます。
Open()
メソッドが起動されたときに、プールに未処理の接続が含まれていない可能性があります。この場合、新規接続が確立されます。
指定した接続タイムアウト値内で有効な接続がない場合、Max
Pool
Size
に達したときにOracleException
がスローされます。
このメソッドは、新規パスワードで新規接続をオープンします。
宣言
// C#
public void OpenWithNewPassword(string newPassword);
パラメータ
newPassword
新規パスワードを含む文字列
備考
このメソッドは、新規接続を確立するためにConnectionString
プロパティの設定を使用します。旧パスワードは、Password
属性値として接続文字列に指定する必要があります。
このメソッドは、クローズ状態内のOracleConnection
にのみコールされます。
備考(.NETストアド・プロシージャ)
このメソッドは、暗黙的なデータベース接続ではサポートされていません。
このメソッドは、文キャッシングが有効な場合、データベースでオープンしているすべてのカーソルをクローズして文キャッシュをフラッシュします
宣言
// C# public void PurgeStatementCache();
備考
文キャッシュを繰り返しフラッシュするとパフォーマンスが低下し、文キャッシュを有効にすることによるパフォーマンス上の利点を相殺してしまうことがあります。
PurgeStatementCache
を呼び出した後、文キャッシングは有効なままです。
このメソッドを起動すると、OracleConnection
に関連付けられた、キャッシュされているカーソルがパージされます。データベース内にキャッシュされているすべてのカーソルがパージされるわけではありません。
例
// C# using System; using System.Data; using Oracle.DataAccess.Client; class PurgeStatementCacheSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle;" + "Statement Cache Size=20"; OracleConnection con = new OracleConnection(constr); con.Open(); OracleCommand cmd = new OracleCommand("select * from emp", con); cmd.CommandType = CommandType.Text; OracleDataReader reader = cmd.ExecuteReader(); // Purge Statement Cache con.PurgeStatementCache(); // Close and Dispose OracleConnection object Console.WriteLine("Statement Cache Flushed"); con.Close(); con.Dispose(); } }
このメソッドは、セッションのグローバリゼーションの設定を、OracleGlobalization
オブジェクトにより指定されたすべてのプロパティ値で変更します。
宣言
// C#
public void SetSessionInfo(OracleGlobalization oraGlob);
パラメータ
oraGlob
OracleGlobalization
オブジェクト
備考
このメソッドのコールは、セッションにおけるALTER
SESSION
SQL
のコールと同等です。
例
// C# using System; using Oracle.DataAccess.Client; class SetSessionInfoSample { static void Main() { string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Get session info from connection object OracleGlobalization info = con.GetSessionInfo(); // Update session info info.DateFormat = "YYYY-MM-DD"; con.SetSessionInfo(info); // Execute SQL SELECT OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select TO_CHAR(hiredate) from emp"; Console.WriteLine("Hire Date ({0}): {1}", info.DateFormat, cmd.ExecuteScalar()); // Clean up cmd.Dispose(); con.Dispose(); } }
OracleConnection
イベントのリストを、表5-28に示します。
表5-28 OracleConnectionイベント
イベント名 | 説明 |
---|---|
|
|
Oracleフェイルオーバーが発生するときにトリガーされるイベント .NETストアド・プロシージャではサポートされません |
|
すべてのメッセージにトリガーされるイベントまたはデータベースにより送信される警告 |
|
接続の状態が変更されたときにトリガーされるイベント |
このイベントは、Oracleフェイルオーバーが発生するときにトリガーされるイベントです。
宣言
// C# public event OracleFailoverEventHandler Failover;
イベント・データ
このイベント・ハンドラは、イベントに関する情報を含む次のプロパティを公開するOracleFailoverEventArgs
オブジェクトを受信します。
FailoverType
フェイルオーバーのタイプを示します。
FailoverEvent
フェイルオーバーの状態を示します。
備考
Failover
イベントは、Oracleインスタンスへの接続が予期せずに切断されると発生します。クライアントはこのイベントをリスニングするためにOracleFailoverEventHandler
デリゲートを作成する必要があります。
このイベントは、すべてのメッセージにトリガーされるかまたはデータベースにより警告が送信されます。
宣言
// C# public event OracleInfoMessageEventHandler InfoMessage;
イベント・データ
このイベント・ハンドラは、イベントに関する情報を含む次のプロパティを公開するOracleInfoMessageEventArgs
オブジェクトを受信します。
Errors
データ・ソースにより生成されたエラーの収集
Message
データ・ソースにより生成されたエラー・テキスト
Source
エラーを生成するオブジェクトの名前
備考
データベースから警告およびメッセージに応答するには、クライアントはこのイベントをリスニングするためにOracleInfoMessageEventHandler
デリゲートを作成する必要があります。
このイベントは、接続の状態が変更されたときにトリガーされます。
宣言
// ADO.NET 2.0: C# public override event StateChangeEventHandler StateChange;
// ADO.NET 1.x: C#
public event StateChangeEventHandler StateChange;
イベント・データ
このイベント・ハンドラは、イベントに関する情報を含む次のプロパティを公開するStateChangeEventArgs
オブジェクトを受信します。
CurrentState
接続の新しい状態
OriginalState
接続の元の状態
備考
StateChange
イベントは接続が状態を変更した後に発生し、明示的にOpen
、Close
またはDispose
がコールされます。
参照:
|