Microsoft .NET Framework 1.1 Data Provider for Oracle と Oracle Data Provider for .NET の比較

 

Bill Hamilton

2004 年 10 月

適用対象:
   .NET Framework
   Oracle Data Provider for .NET (ODP.NET) 9i
   Microsoft .NET Framework 1.1 Data Provider for Oracle

概要: Oracle 用の 2 つの最も一般的な .NET データ プロバイダーの長所を比較し、次の開発プロジェクトに適したプロバイダーを選択する準備をします。 (54ページ印刷)

内容

はじめに
データ型
Connection
コマンド
CommandBuilder
DataReader
REF CURSOR を使用したデータの取得
安全なマッピング
配列バインド
PL/SQL 連想配列
トランザクション
トランザクション アプリケーションのフェールオーバー
情報メッセージとエラー
グローバリゼーション
Microsoft Visual Studio .NET IDE
まとめ
付録: データ プロバイダー型の詳細な比較

はじめに

この記事では、Oracle Data Provider for .NET (ODP.NET) 9i と Microsoft .NET Framework 1.1 Data Provider for Oracle の違いについて説明します。 2 つのプロバイダーには多くの共通点がありますが、重要な違いもあります。

Microsoft プロバイダーには、.NET Framework 1.1 が付属しています。 すべての型は System.Data.OracleClient 名前空間に含まれています。 Microsoft プロバイダーには、Oracle クライアント バージョン 8.1.7 以降が必要です。

ODP.NET は、 の Oracle テクノロジ ネットワーク (OTN) http://www.oracle.com/technology/software/tech/windows/odpnet/index.htmlから自由に利用できます。 これらの型は、Oracle.DataAccess.Client (データ アクセス クラスと列挙型) と Oracle.DataAccess.Types (Oracle データ 型のクラスと構造体) の 2 つの名前空間に含まれています。 どちらの名前空間も、oracle\ora92\bin ディレクトリにあるアセンブリ Oracle.DataAccess.dllにあります。 ODP.NET には Oracle クライアント バージョン 9.2 以降が必要です。

この記事は、2 つのセクションに分かれています。 最初のセクションでは、プロバイダーの機能の主な違いについて説明します。 次の付録では、各データ プロバイダーの型を調べて比較し、プロバイダー内の型間のパブリック コンストラクター、フィールド、メソッド、プロパティ、プロパティ、および演算子の違いを詳しく説明します。類似するデータ プロバイダー型の側面については説明しません。

Microsoft .NET Framework Data Provider for Oracle の詳細については、MSDN を参照してください。 ODP.NET プロバイダーの詳細については、プロバイダーにインストールされているドキュメントを参照してください。

データ型

ODP.NET では、 Oracle.DataAccess.Types 名前空間内のすべてのネイティブ Oracle データ型がサポートされます。 ODP.NET データ型 (クラスまたは構造体) は、.NET Frameworkデータ型よりもネイティブ型にマップされます。 ODP.NET には、Microsoft プロバイダーと比較して Oracle 固有の型が追加されており、これらの型は、データを問い合わせたり、操作したり、変換したりするための追加のメソッドとプロパティを公開します。

ODP.NET OracleDataAdapter を使用すると、データ損失の可能性がある .NET データ型に Oracle データ型を安全にマップできます。 これについては、この記事の後半の「安全なマッピング」セクションで詳しく説明します。

プロバイダー間のデータ型のサポートのその他の違いについては、次のサブセクションで説明します。

Boolean

Microsoft プロバイダーには、Oracle データ型間の比較操作の結果を表す OracleBoolean 構造体があります。 OracleBoolean 構造体は Oracle データ型にマップされず、ヘルパーとして含まれています。 標準のブール値には truefalse の 2 つの値が指定できますが、 OracleBoolean 型には TrueFalseNullOneZero を含めることができます。 OracleBoolean 型には、データの操作を容易にするメソッド、プロパティ、および演算子が用意されています。

LOB

Oracle LOB は、ファイル システムを使用してデータベースの外部に LOB を格納するために使用された BFILE データ型を含む、テキスト ドキュメントや画像などの大きな文字またはバイナリ データを格納するために使用されます。

各データ プロバイダーの LOB データ型をサポートするクラスを次の表に示します。

表 1 LOB データ型をサポートするクラス

Oracle LOB データ型 ODP.NET データ型 Microsoft プロバイダーのデータ型
BFILE Oraclebfile Oraclebfile
BLOB OracleBlob OracleLob
CLOB OracleClob String
NCLOB OracleClob String

一般に、ODP.NET には、Microsoft プロバイダーよりも LOB を取得および管理するための広範な方法があります。

ODP.NET OracleBFile クラスには、OracleBFile オブジェクトの作成に使用できる 2 つのコンストラクターが含まれています。 ODP.NET OracleBFile クラスには、Microsoft プロバイダー クラスと比較すると、BFILE を尋問、コピー、比較するための追加機能が含まれています。

REF CURSOR

ODP.NET は、REF CURSOR (Oracle 結果セットへの参照) を表す OracleRefCursor データ型クラスを提供します。 OracleRefCursor は構築できません。ストアド プロシージャ、関数、または匿名ブロックからパラメーターとしてのみ取得できます。 取得後、OracleRefCursor を使用して OracleDataReader を作成したり、OracleDataAdapter を使用して DataSet にデータを入力したりできます。これについては、この記事の後半の「データの取得」セクションで説明します。

REF CURSOR は接続されたオブジェクトであり、データベースへの基になる接続が閉じられると使用できないことを理解しておくことが重要です。

Timestamp

ODP.NET では、Oracle Timestamp データ型 (OracleTimeStamp、OracleTimeStampTZOracleTimeStampLTZ) をサポートするための 3 つの構造が提供されます。 これらは、 TIMESTAMPTIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE Oracle データ型を表します。 これらのクラスは、 Timestamp データを作成、比較、変換、抽出、および操作するためのメソッド、プロパティ、および演算子を提供します。

String

Microsoft プロバイダー の OracleString クラスの機能に加えて、ODP.NET 実装では、クライアント文字セットの書式設定を使用してバイト配列として文字列値を返す GetNonUnicodeBytes メソッドと、文字列値を Unicode 形式のバイト配列として返す GetUnicodeBytes メソッドが提供されます。

XML

ODP.NET、 OracleXmlType クラスと OracleXmlStream クラスを使用して Oracle XML データ型のサポートを追加します。

OracleXmlType クラスを使用すると、XML データを Oracle データベースにネイティブに格納および変更できます。 XMLType のインスタンスを構築するには、CLOB を指定するか、XML データ、XMLReader、または XmlDocument を含む文字列と共に XML データを取得して格納する接続を指定します。 OracleXmlType には、XML データの問い合、変換、および更新を行うメソッドが用意されています。

OracleXmlStream クラスは、OracleXmlType オブジェクトに格納されている XML データを読み取り専用ストリームとして表します。

ODP.NET OracleCommand クラスは、この記事の後半の「Command」セクションで説明するメソッドを使用した XML 操作をサポートします。

Connection

サポートされている接続文字列の属性は、プロバイダーによって異なります。 以下の 2 つのテーブルでは、各プロバイダーに固有の属性について説明します。

表 2 接続文字列属性の ODP.NET

名前 説明
[接続タイムアウト] プールからの接続を待機する最大時間 (秒単位)。
DBA 特権 管理者特権 (SYSDBA または SYSOPER) を指定します。
プール サイズのデクリ プール内の確立された接続の数が多すぎる場合に閉じられる接続の数。 接続の数が、 最小プール サイズ 属性で指定された値を下回ることはありません。
Incr プール サイズ プール内のすべての接続が使用されるときに確立される接続の数。 接続の数が 、最大プール サイズ 属性で指定された値を超えて増加することはありません。
プロキシ ユーザー ID プロキシ ユーザーのユーザー名。 プロキシ認証は、クライアント ID を保持し、プロキシ資格情報を使用して接続しながらデータベース サーバーに渡します。

ODP.NET は、プロキシ ユーザー ID またはプロキシ パスワード属性が設定されている場合に、プロキシ接続の確立を試みます。

プロキシ パスワード プロキシ ユーザーのパスワード。

表 3 Microsoft Oracle データ プロバイダーの接続文字列属性

名前 説明
Integrated Security ユーザー名とパスワードの組み合わせではなく、統合セキュリティを使用してユーザーを認証するかどうかを指定します。

ODP.NET で統合セキュリティを使用するには、User Id 属性を "/" に設定します。 この場合、 Password 属性は無視されます。

Unicode プロバイダーが UTF16 モード API 呼び出しを使用するかどうかを指定します。 Oracle 9i クライアント ソフトウェアが必要です。

ODP.NET OracleConnection には、Open メソッドがプールされた接続を待機してから要求を終了する時間を指定する ConnectionTimeout プロパティが用意されています。 Microsoft プロバイダーでは、接続文字列属性または OracleConnection を使用して接続タイムアウトを指定することはできません。

ODP.NET OracleConnection には OpenWithNewPassword メソッドが用意されています。これにより、接続文字列のパスワードの有効期限が切れた後に、新しいパスワードで接続を開くことができます。 元のパスワードは、 接続文字列で Password 属性の値として指定する必要があります。

command

ODP.NET では、ODP.NET または.NET Frameworkデータ型としてデータを取得できます。 返されるデータ型は、出力パラメーターのデータ型が DbType または OracleDbType のいずれに設定されているかによって決まります。 OracleParameterOracleDbType プロパティと DbType プロパティはリンクされています。1 つを設定すると、もう一方が適切な型に推論されます。

既定では、 OracleCommand.CommandType = Text コマンドの ODP.NET パラメーターは位置によってバインドされます。 OracleCommand クラスは BindByName プロパティを提供します。このプロパティを true に設定して、位置ではなく名前でパラメーターをバインドします。 Microsoft プロバイダーは、常に名前でパラメーターをバインドします。

ODP.NET は AddRowid プロパティを提供します。このプロパティを true に設定すると、結果セットの一部として ROWID が自動的に返されます。

クエリで ROWID を 明示的に要求することで、Microsoft プロバイダーで ROWID にアクセスできます。 次に例を示します。

select ROWID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME from EMPLOYEES;

ODP.NET OracleCommandExecuteStream メソッドは、XML コマンドの結果セットを XML ドキュメントを含むストリームとして返します。 ODP.NET OracleCommandExecuteXmlReader メソッドは、XML コマンドの結果セットを XmlTextReader として返します。

ODP.NET OracleCommand では、XmlCommandTypeXmlQueryPropertiesXmlSaveProperties の 3 つのメソッドを使用した XML 操作がサポートされています。 XmlQueryProperties クラスと XmlSaveProperties クラスは、XML ドキュメントのスキーマ変換と XSL 変換を定義することで、XmlCommandType プロパティ (QueryInsertUpdateDelete) で指定された XML 操作をサポートします。 Query XML コマンドの CommandText プロパティは、SQL SELECT ステートメントです。 CommandTextXmlQueryProperties プロパティ (XmlQueryProperties オブジェクトで指定) を使用して、クエリ操作を実行し、結果を XML ドキュメントとして返します。 InsertUpdate、Delete XMLCommandText プロパティは、データベースに対して行われる変更を含む XML ドキュメントです。 CommandTextXmlSaveProperties プロパティ (XmlSaveProperties オブジェクトで指定) は、操作を実行するために使用されます。 上記の場合、OracleCommandCommandType プロパティは無視されます。

CommandBuilder

ODP.NET CommandBuilder は、コマンドのビルドに使用されるメタデータを取得するために必要な追加のラウンドトリップを排除するように最適化されています。 ODP.NET では、 DataColumnDataTable の Extended Properties コレクションを使用して、個別のラウンド トリップを必要とせずにコマンドをビルドするのに十分なスキーマ情報を CommandBuilder に提供する名前と値のペアを格納します。

Microsoft プロバイダーには、OracleCommand オブジェクトで指定された Oracle ストアド プロシージャのパラメーターに関する情報を OracleParameter コレクションに取得する DeriveParameters メソッドがあります。 この方法は、余分なラウンドトリップとデータベース処理が必要になるため、運用コードでの有用性が限られています。

DataReader

ODP.NET には、すべてのネイティブ Oracle データ型にマップする型指定されたアクセサーが用意されています。 これには、Microsoft プロバイダーで使用できないアクセサーが含まれます。

ODP.NET、OracleCommandInitalLONGFetchSize プロパティの値を調べて、LONG データ型と LONG RAW データ型の値をすぐにフェッチする必要があるかどうかを判断します。 InitalLONGFetchSize が既定値の 0 に設定されている場合、適切な OracleDataReader 型アクセサーを使用してデータが明示的に要求されるまで、列のデータの取得は遅延されます。 InitialLONGFetchSize が 0 以外の場合、指定したバイト数または文字数がすぐにフェッチされます。

同様に、ODP.NET は OracleCommandInitialLOBFetchSize プロパティの設定に基づいて LOB データ型をフェッチします。 InitialLOBFetchSize プロパティが 0 以外の場合、GetOracleBlob および GetOracleLob 型のアクセサー メソッドは無効になります。LOB データは、GetBytes アクセサーまたは GetChars アクセサーを使用してフェッチする必要があります。

ODP.NET は、OracleCommandOracleDataReaderFetchSize プロパティを提供します。このプロパティは、OracleDataReader 内部キャッシュのサイズをバイト単位で指定し、アプリケーションとデータベース間の通信を最適化するために使用できます。 OracleDataReader は、リーダーの作成に使用される OracleCommand から FetchSize 値を継承します。値は、必要に応じてリーダーで変更できます。 キャッシュは、OracleDataReaderRead メソッドが最初に呼び出された後に割り当てられます。最初の読み取り後に FetchSize を変更しても効果はありません。

ODP.NET は、OracleCommandRowSize プロパティを提供します。これは、OracleDataReader の内部キャッシュが 1 行のデータを格納するために必要なバイト数を表します。 ODP.NET、データを返すコマンドを実行した後に、データベース メタデータの値を設定します。 その後、値を変更してデータ アクセスを最適化できます。 RowSize プロパティを使用すると、事前に行サイズがわからないアプリケーションで実行時に FetchSize プロパティの適切な値を決定できます。 FetchSize 値を最適化するには、アプリケーションが各ラウンド トリップで取得する行サイズと行数の積に設定します。

REF CURSOR を使用したデータの取得

このセクションの例では、既定のインストールの一部として含まれる HR スキーマと、次のパッケージ仕様とパッケージ本文を使用します。

CREATE OR REPLACE  PACKAGE "HR"."GET_EMPLOYEES" AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetEmployees (cur_Employees OUT T_CURSOR);
END GET_EMPLOYEES;

CREATE OR REPLACE  PACKAGE BODY "HR"."GET_EMPLOYEES" AS
PROCEDURE GetEmployees (cur_Employees OUT T_CURSOR)
IS
BEGIN
    OPEN cur_Employees FOR
    SELECT * FROM EMPLOYEES;
END GetEmployees;
END GET_EMPLOYEE;

ODP.NET では、次の例に示すように、OracleRefCursor オブジェクトから DataReader を作成できます。

OracleConnection conn = new OracleConnection(
    "Data Source=orcl; User Id=HR; Password=password;");

OracleCommand cmd = new OracleCommand("GET_EMPLOYEES.GetEmployees", conn);   
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("cur_Employees", OracleDbType.RefCursor,
    ParameterDirection.Output);

conn.Open();
cmd.ExecuteNonQuery();
         
// get the OracleRefCursor from the output parameter
OracleRefCursor refcur =
    (OracleRefCursor)cmd.Parameters["cur_Employees"].Value;

// get the DataReader using the OracleRefCursor
OracleDataReader dr = refcur.GetDataReader();
while(dr.Read())
   Console.WriteLine(dr["EMPLOYEE_ID"] + "; " + dr["FIRST_NAME"] + "; " +
       dr["LAST_NAME"]);

conn.Close();

コンソール出力の最初の 5 行は次のとおりです。

100; Steven; King
101; Neena; Kochhar
102; Lex; De Haan
103; Alexander; Hunold
104; Bruce; Ernst

クエリが複数の REF CURSORを返す場合、OracleDataReader.NextResult メソッドは、OracleRefCursor パラメーターがバインドされている順序で REF CURSORs によって返される結果セットにアクセスします。

ODP.NET は、DataAdapterFill メソッドのオーバーロードを提供します。これにより、REF CURSOR を使用して DataSet または DataTable を塗りつぶすことができます。 以下の例を参照してください。

OracleConnection conn = new OracleConnection(
    "Data Source=orcl; User Id=HR; Password=password;");

OracleCommand cmd = new OracleCommand("GET_EMPLOYEES.GetEmployees", conn);   
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("cur_Employees", OracleDbType.RefCursor, ParameterDirection.Output);

conn.Open();
cmd.ExecuteNonQuery();
         
// get the OracleRefCursor from the output parameter
OracleRefCursor refcur =
    (OracleRefCursor)cmd.Parameters["cur_Employees"].Value;
OracleDataAdapter da = new OracleDataAdapter("", conn);
DataTable dt = new DataTable();
// fill the DataTable using the OracleRefCursor
da.Fill(dt, refcur);

foreach(DataRow row in dt.Rows)
   Console.WriteLine(row["EMPLOYEE_ID"] + "; " +
       row["FIRST_NAME"] + "; " + row["LAST_NAME"]);

conn.Close();

コンソール出力の最初の 5 行は次のとおりです。

100; Steven; King
101; Neena; Kochhar
102; Lex; De Haan
103; Alexander; Hunold
104; Bruce; Ernst

クエリが複数の REF CURSOR を返す場合、DataSet 内の複数の DataTable オブジェクトが自動的に設定されます。 これらのテーブルの名前は TableN です。N は、最初の REF CURSOR によって返される結果セットの 0 から始まる整数です。

安全なマッピング

Oracle データ型では、.NET データ型への変換中にデータが失われる可能性があります。 これらの型は、 NUMBERDATE、すべての タイムスタンプ 型、 INTERVAL DAY TO SECOND です

ODP.NET プロバイダーには、OracleDataAdapter クラスの SafeMapping プロパティがあります。これを使用すると、.NET と同等のデータ型を持たない Oracle データ型を、Oracle 形式の String 配列またはバイト配列にマップできます。 SafeMapping プロパティは、列名を文字列型または byte[] 型にマップする名前と値のペアを格納する Hashtable にアクセスします。

da.SafeMapping.Add("EMPNO", typeof(byte[]));

列名にアスタリスクを指定して、データが失われる可能性のあるすべての列をマップできます。

da.SafeMapping.Add("*", typeof(byte[])); 

列名で指定されたマッピングは、アスタリスク マッピングよりも優先されます。

配列バインド

ODP.NET では、複数のパラメーター セットがサポートされています。 この手法を使用すると、1 回のラウンド トリップでクエリを複数回実行できます。 これは、各パラメーター値を 1 つの値ではなく配列に設定することによって行われます。 次に、OracleCommand オブジェクトの ArrayBindCount をパラメーター セットの数に設定します。 次の例では、配列バインドを使用して、HR スキーマの COUNTRIES テーブルに 2 つの行を挿入します。

// create an array of values for each column
string[] aCountryId = new string[2]{"AA", "AB"};
string[] aCountryName = new string[2]{"Country AA", "Country AB"};
int[] aRegionId = new int[2]{1, 2};

// create the insert command
OracleCommand cmd = new OracleCommand();
cmd.CommandText = "INSERT INTO COUNTRIES(COUNTRY_ID, COUNTRY_NAME,
    REGION_ID) VALUES (:countryId, :countryName, :regionId)";

// set the number of values (rows) in the arrays
cmd.ArrayBindCount = 2; 

// Create parameters for the array operations 
cmd.Parameters.Add("countryId", OracleDbType.Char, 2,
    ParameterDirection.Input).Value = aCountryId;
cmd.Parameters.Add("countryName", OracleDbType.Varchar2, 40,
    ParameterDirection.Input).Value = aCountryName;
cmd.Parameters.Add("regionId", OracleDbType.Int32, 0,
    ParameterDirection.Input).Value = aRegionId;

// create the connection and execute the command
OracleConnection conn = new OracleConnection(
    "Data Source=orcl; User Id=HR; Password=password;");
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

配列バインドによって部分的なエラーが発生する可能性があることに注意することが重要です。 必要に応じて、コマンドをローカル トランザクションでラップし、部分的な障害が発生した場合にロールバックします。

ArrayBindStatus プロパティは、OracleParameterStatus 列挙の値を使用して、パラメーター配列内の各値の状態を指定するために使用されます。 ArrayBindStatus は、null 値が列に挿入されることを示すためにアプリケーションによって設定され、実行後に ODP.NET して、値が正常に取得されたこと、null 値が列にフェッチされたこと、またはフェッチされた値が切り捨てられたことを示します。

配列バインドの実行中にエラーが発生した場合、OracleError オブジェクトの ArrayBindIndex プロパティは、エラーの原因となった行番号を示します。

PL/SQL 連想配列

ODP.NET では PL/SQL 連想配列バインドがサポートされているため、連想配列 OracleParameter を PL/SQL ストアド プロシージャにバインドできます。

PL/SQL 連想配列を使用するには:

  1. OracleParameterCollectionType プロパティを OracleCollectionType.PLSQLAssociativeArray として指定します。
  2. OracleParameterSize プロパティを使用して、配列内の要素の最大数を指定します。
  3. ArrayBindSize プロパティを使用して、配列内の各要素のサイズを指定します。
  4. 各入力パラメーター値の ArrayBindStatusOracleParameterStatus.Success に設定します。
  5. コマンドを実行します。

トランザクション

ODP.NET OracleCommand クラスでは、トランザクション セーブポイントの作成と、それらのセーブポイントへのロールバックがサポートされています。 これは、次のコードに示すように Oracle SAVEPOINT または ROLLBACK TO SAVEPOINT トランザクションを実行することで、Microsoft プロバイダーで簡単に実行できます。

new OracleCommand("SAVEPOINT " + savePointName, tran.Connection,
    tran).ExecuteNonQuery(); 

new OracleCommand("ROLLBACK TO SAVEPOINT " + savePointName,
    tran.Connection, tran).ExecuteNonQuery();

Oracle データベースは、1 つの接続で複数のトランザクションをサポートしていません。これらは常に接続レベルでスコープ指定されます。 したがって、ODP.NET は、接続で実行されたコマンドにトランザクションを伝達します。 Microsoft プロバイダーでは、各コマンドにトランザクションを明示的に割り当てる必要があります。

Microsoft プロバイダーは、OracleConnection クラスの EnlistDistributedTransaction メソッドを使用して、分散トランザクションに接続を参加させます。 ODP.NET では、Oracle Technology Network (OTN) から無料でダウンロードできる Oracle Services for MTS (OraMTS) を使用した分散トランザクションが http://www.oracle.com/technology/tech/windows/ora_mts/index.htmlサポートされます。

トランザクション アプリケーションのフェールオーバー

Oracle では、トランザクション アプリケーション フェールオーバー (TAF) を使用して、接続に失敗した場合に別のノードを使用してデータベースに自動的に再接続することで高可用性を実現します。新しいデータベース接続は元のデータベース接続と同じです。 アクティブなトランザクションは、再接続プロセスの一環としてロールバックされます。

フェールオーバーが発生すると、 ODP.NET OracleConnection によってフェールオーバー イベントが発生 します 。 これにより、フェールオーバーが発生したときにアプリケーションに通知を受け取ることができ、フェールオーバーの遅延やエラーに対処できます。 発生するフェールオーバー イベントは、接続の損失が検出されたとき、接続が正常に再確立されたとき、フェールオーバーが成功しなかった場合を示します。 OracleFailoverEventArgs をチェックして、フェールオーバーが成功したかどうかを判断できます。

次のコードは、 OracleFailoverEvent ハンドラーと、関連付けられている フェールオーバー ハンドラーのコード フラグメントを登録する方法を示しています。

// register the handler for the connection Failover event
conn.Failover += new OracleFailoverEventHandler(OnFailover);

// handler for the Failover event
public FailoverReturnCode OnFailover(object sender,
    OracleFailoverEventArgs e)
{
    switch(e.FailoverEvent)
    case FailoverEvent.Begin:  // failover is starting
        ...
        break;
    case FailoverEvent.Abort:  // failover unsuccessful - no retry option
        ...
        break;
    case FailoverEvent.End:    // failover successfully completed
        ...
        break;
    case FailoverEvent.Reauth: // user handle has been reauthenticated
        ...
        break;
    case FailoverEvent.Error:  // failover unsuccessful - application can
        ...                    // return FailoverReturnCode.Retry to retry
        break;
    
    return FailoverReturnCode.Success;
}

情報メッセージとエラー

ODP.NET と Microsoft プロバイダーの両方の OracleConnection クラスは、Oracle が警告または情報メッセージを送信すると InfoMessage イベントを発生させます。

OracleException クラスは、ODP.NET プロバイダーと Microsoft プロバイダーの両方に共通です。 これは、データ プロバイダーでエラーが発生したときにスローされる例外を表します。

ODP.NET は、Microsoft プロバイダーよりも情報メッセージ (InfoMessage) とプロバイダー エラー (OracleException) の詳細を公開するプロパティを提供します。 追加の詳細は、エラーに関する詳細を公開する OracleError オブジェクトのコレクションを含む OracleErrorCollection オブジェクトを通じて提供されます。

InfoMessage イベントは、OracleInfoMessageEventArgsErrors プロパティを使用して OracleErrorCollection を公開します。 OracleException は、Errors プロパティを使用して OracleErrorCollection公開します。

グローバリゼーション

Oracle のグローバリゼーション設定には、文字セット、通貨の書式設定、データの書式設定、言語、並べ替え順序、カレンダー、タイム スタンプの書式設定が含まれます。 OracleGlobalization クラスは、これらの設定を表すために使用されます。

クライアントグローバリゼーション設定は、クライアント コンピューターの Windows レジストリのグローバリゼーション設定から派生します。 これらの設定は、アプリケーションの有効期間中は変更できません。 ODP.NET は、OracleGlobalization クラスの GetClientInfo 静的メソッドを提供して、これらの設定を取得します。 次に例を示します。

OracleGlobalization cg = OracleGlobalization.GetClientInfo();

セッショングローバリゼーション設定は、最初はクライアントグローバリゼーション設定に設定されますが、データベースへの接続が確立されると変更できます。 ODP.NET OracleConnection クラスには、現在のセッションのグローバリゼーション設定を取得および変更できる GetSessionInfo メソッドと SetSession 情報メソッドが用意されています。 次の例では、セッションのグローバリゼーション設定を取得し、セッションの DataFormat 設定を変更します。

OracleConnection conn = new OracleConnection(
    "Data Source=orcl; User Id=HR; Password=password;");
conn.Open();
OracleGlobalization sg = conn.GetSessionInfo();
sg.DateFormat = "MM/DD/YYYY";
conn.SetSessionInfo(sg);

スレッドベースのグローバリゼーション設定は、各スレッドに固有です。 セッショングローバリゼーション設定と同様に、これらは最初はクライアントグローバリゼーション設定に設定され、次の例に示すように、OracleGlobalization クラスの GetThreadInfo および SetThreadInfo 静的メソッドを使用して取得および変更できます。

OracleGlobalization tg = OracleGlobalization.GetThreadInfo();
tg.DateFormat = "MM/DD/YYYY";
OracleGlobalization.SetThreadInfo(tg);

Microsoft Visual Studio .NET IDE

Microsoft プロバイダーは、Visual Studio .NET コード生成ウィザードを使用するために、Microsoft Visual Studio .NET IDE の [データ] ツールボックスから OracleConnectionOracleCommandOracleDataAdapter クラスのドラッグ アンド ドロップをサポートしています。 この機能は、ODP.NET ではサポートされていません。

まとめ

Microsoft .NET Framework 1.1 Data Provider for Oracle と Oracle Data Provider for .NET (ODP.NET) 9i はどちらも自由に使用でき、多くの場合、同等の機能を提供します。 いずれかのプロバイダーを使用したアプリケーション開発は、2 つのプロバイダーの対応するクラスの名前が同じで、同じ.NET Framework インターフェイスを実装するため、異なるよりも似ています。 ただし、いくつかの重要な違いがあります。

場合によっては、ODP.NET データ型がネイティブの Oracle 型とより密接にマップされます。 ODP.NET では、 LOBTimestampsREF CURSOR、Oracle XML データ型などの複雑なデータ型を操作するために、Microsoft プロバイダーで使用できるヘルパー メソッド以外にもヘルパー メソッドが用意されています。 これらの違いは、これらの種類を広範囲に使用している場合にソフトウェア開発を容易にする可能性がありますが、一般に Microsoft プロバイダーで同じタスクを実行することは可能です。 ODP.NET には、データベース接続、情報メッセージとエラーの詳細、配列バインド、PL/SQL 連想配列、トランザクション アプリケーション フェールオーバー (TAF)、グローバリゼーションを操作するために Microsoft プロバイダーで使用できない機能も用意されています。

Microsoft プロバイダーは Visual Studio .NET IDE により緊密に統合されているため、接続、コマンド、データ アダプターにコード生成ウィザードを使用できます。現在、ODP.NET では使用できません。 Microsoft プロバイダーの展開は、.NET Framework バージョン 1.1 以降の一部としてインストールされるため、より簡単です。 Microsoft プロバイダーは Oracle クライアント バージョン 8.1.7 以降でサポートされていますが、ODP.NET には Oracle クライアント バージョン 9.2 以降が必要です。

Microsoft データ プロバイダーと、この記事に記載されている ODP.NET の詳細な比較と、アプリケーションの開発と展開の要件を使用して、適切なデータ プロバイダーを選択します。

クックブック ADO.NET

Nutshell で ADO.NET する

筆者について

Bill Hamilton は、Microsoft .NET および J2EE テクノロジを使用した分散アプリケーションの設計、開発、実装に特化したソフトウェア アーキテクトです。 初期のテクノロジ導入者である彼は、クライアントが新しいテクノロジを効果的に使用することを頻繁に評価し、推奨し、支援します。 Bill は、上記の関連書籍セクションで参照されている 2 つの ADO.NET 書籍を執筆しています。

 

付録: データ プロバイダー型の詳細な比較

この付録では、まず、各データ プロバイダーの型を相互にマッピングします。 次の各型の比較では、プロバイダー内の型間のパブリック コンストラクター、フィールド、メソッド、プロパティ、および演算子の違いについて詳しく説明します。型の同様の側面については説明しません。

データ プロバイダー型のマッピング

次の 2 つのテーブルは、ODP.NET の型を対応する Microsoft Oracle データ プロバイダーの型にマップします。

Oracle データ アクセス クラス

ODP.NET Microsoft Oracle データ プロバイダー
OracleCommand クラス OracleCommand
OracleCommandBuilder クラス OracleCommandBuilder
OracleConnection クラス OracleConnection
OracleDataAdapter クラス OracleDataAdapter
OracleDataReader クラス OracleDataReader
OracleError クラス 該当なし
OracleErrorCollection クラス 該当なし
OracleException クラス OracleException
OracleFailoverEventArgs クラス 該当なし
OracleFailoverEventHandler デリゲート 該当なし
OracleGlobalization クラス 該当なし
OracleInfoMessageEventHandler デリゲート OracleInfoMessageEventHandler
OracleInfoMessageEventArgs クラス OracleInfoMessageEventArgs
OracleParameter クラス OracleParameter
OracleParameterCollection クラス OracleParameterCollection
OracleRowUpdatedEventArgs クラス OracleRowUpdatedEventArgs
OracleRowUpdatedEventHandler デリゲート OracleRowUpdatedEventHandler
OracleRowUpdatingEventArgs クラス OracleRowUpdatingEventArgs
OracleRowUpdatingEventHandler デリゲート OracleRowUpdatingEventHandler
OracleTransaction クラス OracleTransaction
OracleXmlQueryProperties クラス 該当なし
OracleXmlSaveProperties クラス 該当なし
該当なし OraclePermission
該当なし OraclePermissionAttribute

Oracle データ型のクラスと構造体

ODP.NET Microsoft Oracle データ プロバイダー
OracleBFile クラス Oraclebfile
OracleBinary 構造体 OracleBinary
該当なし OracleBoolean 構造体
OracleBlob クラス OracleLob
OracleClob クラス OracleLob
OracleDate 構造体 OracleDateTime
OracleDecimal 構造体 OracleNumber
OracleIntervalDS 構造体 OracleTimeSpan
OracleIntervalYM 構造体 OracleMonthSpan
OracleRefCursor クラス 該当なし
OracleString 構造体 OracleString
OracleTimeStamp 構造体 該当なし
OracleTimeStampLTZ 構造体 該当なし
OracleTimeStampTZ 構造体 該当なし
OracleXmlStream クラス 該当なし
OracleXmlType クラス 該当なし

データ アクセス クラス

ODP.NET プロバイダーと Microsoft プロバイダーの両方に、Oracle データ ソースへのアクセスに使用されるクラスのセットがあります。 次のサブセクションでは、プロバイダーによるこれらのクラスの実装の違いについて説明します。

OracleCommand

OracleCommand クラスは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 OracleCommand クラスは、SQL ステートメント、ストアド プロシージャ、またはテーブル名を表します。 要求が作成され、データベースに渡され、結果が適切なクラスのインスタンスとして返されます。 各プロバイダーの OracleCommand クラスは、 System.Data.IDbCommand インターフェイスを 実装します。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター コンストラクター

OracleCommand(string query, OracleConnection conn, OracleTransaction tran)

メソッド

ExecuteStream()

XmlCommandType プロパティと CommandText プロパティを使用してコマンドを実行し、結果セット XML ドキュメントを含む Stream を返します。

ExecuteToStream(Streams)

XmlCommandType プロパティと CommandText プロパティを使用してコマンドを実行し、結果セット XML ドキュメントを既存の Stream に追加します。

ExecuteXmlReader()

XmlCommandType プロパティと CommandText プロパティを使用してコマンドを実行し、結果セット XML ドキュメントを XmlTextReader として返します。

メソッド

ExecuteOracleNonQuery(out OracleString rowId)

データベースに対して PL/SQL ステートメントを実行し、影響を受ける行の数と、INSERT、UPDATE、または DELETE コマンドの影響を受ける行の Oracle サーバー ROWID を返します。ここで、1 つの行が影響を受けます。

ExecuteOracleScalar()

クエリを実行し、最初の行の最初の列を Oracle 固有のデータ型として返します。 結果が REF CURSOR の場合、メソッドは null 参照を返します。

プロパティ

AddRowid {get; set;}

SELECT クエリによって返される結果セットの一部として ROWID 追加します。 既定では、 ROWID は非表示になっています。

ArrayBindCount {get; set;}

配列バインドを使用するかどうかを指定し、 OracleParameter Value プロパティでバインドする要素の数を指定します。

BindByName {get; set;}

コレクション内のバインド メソッドを指定します。 true の値は名前で、false は位置別です。 既定値は false です。 このプロパティは、 CommandType.Text でのみサポートされています。

FetchSize {get; set;}

OracleDataReader 内部キャッシュのサイズをバイト単位で指定し、各サーバーラウンドトリップの結果セットを格納します。 既定値は 65536 バイトです。

InitialLOBFetchSize {get; set;}

OracleDataReader によってすぐにフェッチされる LOB データの初期量のサイズをバイト単位で指定します。 値は、 CLOB および NCLOB データの文字数と BLOB データのバイト数です。 既定値は 0 で、最大値は 32767 です。 既定値が 0 の場合、データ取得は特に要求されるまで遅延されます。

InitialLONGFetchSize {get; set;}

LONG 列と LONG RAW 列の初期量のサイズをバイト単位で指定します。 既定値は 0 で、最大値は 32767 です。 既定値が 0 の場合、データ取得は特に要求されるまで遅延されます。

RowSize {get; set;}

1 行のデータを格納するために OracleDataReader 内部キャッシュに必要なメモリの量をバイト単位で取得します。 値は、結果セットを返すコマンドの実行後に設定されます。 このプロパティを使用すると、 FetchSize プロパティを使用して、サーバーのラウンド トリップごとに複数の行 (FetchSize = RowSize * 行数) を取得できます。

XmlCommandType {get; set;}

XML 操作の種類を OracleXmlCommandType 値として指定します。

XmlQueryProperties {get; set;}

結果セットから XML ドキュメントを作成するときに OracleXmlQueryProperties 値として使用されるプロパティを指定します。

XmlSaveProperties {get; set;}

データベースへの変更を OracleXmlSaveProperties 値として保存するために XML ドキュメントを使用するときに使用するプロパティを指定します。

プロパティ

トランザクション {get; set;}

コマンドを実行する OracleTransaction を指定します。

OracleCommandBuilder

OracleCommandBuilder クラスは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 基になるデータベースを使用して DataSet に加えられた変更を調整する単一テーブル SQL ステートメントが自動的に生成されます。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター コンストラクター
メソッド メソッド

static DeriveParameters(OracleCommand cmd)

OracleCommand で指定されたストアド プロシージャからパラメーター情報を取得し、OracleCommand オブジェクトの OracleParameterCollection を設定します。

プロパティ

CaseSensitive {get; set;}

Oracle オブジェクトの名前を二重引用符で囲むかどうかを指定します。 既定値は false です。

プロパティ

QuotePrefix {get; set;}

Oracle オブジェクトの名前のプレフィックスとして使用される文字を指定します。

QuoteSuffix {get; set;}

Oracle オブジェクトの名前のサフィックスとして使用される文字を指定します。

OracleConnection

OracleConnection クラスは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 接続文字列を使用して作成された Oracle データベースへの接続を表します。 各プロバイダーの OracleConnection クラスは、 System.Data.IDbConnection インターフェイスを 実装します。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター コンストラクター
メソッド

Clone()

OracleConnection オブジェクトのコピーを作成します。

GetSessionInfo()

セッションのグローバリゼーション設定を表す新しい OracleGlobalization オブジェクトを返します。

GetSessionInfo(OracleGlobalization og)

セッションのグローバリゼーション設定を表す OracleGlobalization オブジェクトを更新します。

OpenWithNewPassword(string newPassword)

新しいパスワードで閉じた OracleConnection を開きます。 古いパスワードは、接続文字列で Password 属性値として指定する必要があります。

SetSessionInfo(OracleGlobalization og)

OracleGlobalization オブジェクト パラメーターで指定されたプロパティを使用して、グローバリゼーション設定を設定します。

メソッド

EnlistDistributedTransaction(ITransaction distributedTransaction)

指定した分散トランザクションに接続を参加させます。 このメソッドを使用すると、自動参加が無効になっている場合に、既存の分散トランザクションに参加できます。

プロパティ

ConnectionTimeout {get;}

Open() メソッドがプールされた接続を待機してから要求を終了するまでの最大時間 (秒単位) を取得します。

プロパティ
イベント

[フェールオーバー]

Oracle フェールオーバーが発生したときに発生します。

イベント

OracleDataAdapter

OracleDataAdapter クラスは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 これは、接続と、 DataSet または DataTable を埋め、基になるデータベースで変更を調整する一連のコマンドを表します。 各プロバイダーの OracleDataAdapter クラスは 、System.Data.Common.DbAdapter を拡張し、 System.Data.IDbAdapter インターフェイスと System.Data.IDataAdapter インターフェイスを実装します。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター コンストラクター
メソッド

Fill(DataTable dt, OracleRefCursor cur)

Fill(DataSet ds, OracleRefCursor cur)

Fill(DataSet ds, string srcTable, OracleRefCursor cur)

Fill(DataSet ds, int startRecord, int maxRecords, string srcTable, OracleRefCursor cur)

DataTable または DataSet を設定または更新します。 オーバーロードを使用すると、 OracleRefCursor を使用して行を指定できます。

メソッド
プロパティ

{get; set;} の再クエリ

後続の Fill() の呼び出しに対して SelectCommand を実行するかどうかを指定します。

SafeMapping {get; set;}

DATETimeStampINTERVAL DAY TO SECONDNUMBER データ型のデータを保持する結果セット列と .NET データ型の間のマッピングを指定します。

プロパティ

OracleDataReader

OracleDataReader クラスは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 これは、データベースからの結果セットの順方向専用の読み取り専用ストリームを表します。 各プロバイダーの OracleDataReader は、 System.Data.IDataReader インターフェイスと System.Data.IDataRecord インターフェイスを 実装します。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター

該当なし

コンストラクター

該当なし

メソッド

GetOracleBlob(int colIndex)

指定した列の OracleBlob オブジェクトを返します。

GetOracleBlobForUpdate(int colIndex)

GetOracleBlobForUpdate(int colIndex, int waitLockSec)

指定した列の更新可能な OracleBlob オブジェクトを返します。

GetOracleClob(int colIndex)

指定した列の OracleClob オブジェクトを返します。

GetOracleClobForUpdate(int colIndex)

GetOracleClobForUpdate(int colIndex, int waitlockSec)

指定した列の更新可能な OracleClob オブジェクトを返します。

GetOracleDate(int colIndex)

指定した DATE 列の OracleDate 構造体を返します。

GetOracleDecimal(int colIndex)

指定した NUMBER 列の OracleDate 構造体を返します。

GetOracleIntervalDS(int colIndex)

指定した INTERVAL DAY TO SECOND 列の OracleIntervalDS 構造体を返します。

GetOracleIntervalYM(int colIndex)

指定した INTERVAL YEAR TO MONTH 列の OracleIntervalYM 構造体を返します。

GetOracleTimeStamp(int colIndex)

指定した TimeStamp 列の OracleTimeStamp 構造体を返します。

GetOracleTimeStampLTZ(int colIndex)

指定した TimeStamp WITH LOCAL TIME ZONE 列の OracleTimeStampLTZ 構造体を返します。

GetOracleTimeStampTZ(int colIndex)

指定した TimeStamp WITH TIME ZONE 列の OracleTimeStampTZ 構造体を返します。

GetOracleXmlType(int colIndex)

指定した XMLType 列の OracleXmlType オブジェクトを返します。

GetXmlReader(int colIndex)

XMLType 列を .NET XmlTextReader オブジェクトとして返します。

メソッド

GetOracleDateTime(int colIndex)

指定した列の OracleDateTime オブジェクトを返します。

GetOracleLob(int colIndex)

指定した列の OracleLob オブジェクトを返します。

GetOracleMonthSpan(int ColIndex)

指定した列の OracleMonthSpan オブジェクトを返します。

GetOracleNumber(int colIndex)

指定した列の OracleNumber オブジェクトを返します。

GetOracleTimeSpan(int colIndex)

指定した列の OracleTimeSpan オブジェクトを返します。

プロパティ

FetchSize {get; set;}

OracleDataReader 内部キャッシュのサイズをバイト単位で指定します。 既定値は OracleCommandFetchSize プロパティ値です。

InitialLOBFetchSize {get; set;}

OracleDataReader が LOB 列に対して最初にフェッチするサイズを指定します。 既定値は OracleCommandInitialLOBFetchSize プロパティ値です。

InitialLONGFetchSize {get; set;}

LONG 列と LONG RAW 列に対して OracleDataReader が 最初にフェッチするサイズを指定します。 既定値は OracleCommandInitialLONGFetchSize プロパティ値です。

プロパティ

OracleError と OracleErrorCollection [ODP.NET のみ]

OracleError クラスと OracleErrorCollection クラスは、ODP.NET データ プロバイダーに固有です。 OracleError クラスは、Oracle データベースによって報告される警告またはエラーを表します。 OracleErrorCollection クラスは、OracleError オブジェクトの ArrayList です。

次の表は、 OracleError クラスの実装の概要を示しています。

ODP.NET Microsoft
コンストラクター

該当なし

該当なし
メソッド

ToString()

OracleError の文字列形式を 次の形式で返しますOra-error number: Class.Method name error message stack trace information

 
プロパティ

ArrayBindIndex {get;}

配列バインドの実行中に発生したエラーの行番号。 複数のエラーが発生すると、OracleErrorCollection で複数の OracleError オブジェクトが生成されます。

DataSource {get;}

Oracle データベースを識別する TNS 名。

メッセージ {get;}

エラーを説明するメッセージ。

数値 {get;}

Oracle エラー番号。

プロシージャ {get;}

エラーの原因となったストアド プロシージャの名前。

ソース {get;}

エラーを生成したデータ プロバイダーの名前。

 

OracleException

OracleException クラスは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 どちらのプロバイダーでも、 クラスは、プロバイダーがエラーを検出したときにスローされる例外を表します。 Microsoft プロバイダーでは、 クラスは、ODP.NET プロバイダーの OracleError クラスと同様に 、Oracle データベースによって返される警告またはエラーも表します。 各プロバイダーの OracleException クラスは 、System.Exception を拡張します。

次の表は、実装間のその他の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター

該当なし

コンストラクター

該当なし

メソッド

GetObjectData(SerializationInfo si, StreamingContext sc)

SerializationInfo オブジェクトに例外に関する情報を設定します。 この情報には、 DataSourceMessageNumberProcedureSourceStackTrace が含まれます

ToString()

例外の完全修飾名、Message プロパティのエラー メッセージ、 InnerException.ToString() メッセージ、スタック トレースを含む文字列を返します。 このメソッドは 、System.Exception 実装をオーバーライドします。

メソッド
プロパティ

DataSource {get;}

Oracle インスタンスに接続するための情報を含む TNS 名。

エラー {get;}

Oracle データベースによって生成される例外の詳細を含む OracleError オブジェクトのコレクション。

数値 {get;}

Oracle エラー番号。

プロシージャ {get;}

例外の原因となったストアド プロシージャの名前。

ソース {get;}

エラーを生成したデータ プロバイダーの名前。

プロパティ

コード {get;}

エラーのコード部分を取得します。

OracleFailoverEventArgs と OracleFailoverEventHandler [ODP.NET のみ]

OracleFailoverEventArgs クラスと OracleFailoverEventHandler デリゲートは、ODP.NET データ プロバイダーに固有です。 OracleFailoverEventArgs クラスは、クライアント接続要求が正常に行われたり、リスナーが応答していない場合に別のリスナーに正常に転送されなかったりしたときに発生する OracleConnection.Failover イベントのデータを表します。 OracleFailoverEventHandler デリゲートは、そのイベントを処理するメソッドのシグネチャを表します。

次の表に、実装の概要を示します。

ODP.NET Microsoft
コンストラクター

該当なし

該当なし
メソッド  
プロパティ

FailoverType {get;}

クライアントが FailoverType 値として要求したフェールオーバーの種類。

FailoverEvent {get;}

フェールオーバーの状態を FailoverEvent 値として指定します。

 

OracleGlobalization [ODP.NET のみ]

Oracle グローバリゼーションのサポートを使用すると、エラー メッセージ、並べ替え順序、データ型と規則、ユーティリティがネイティブ言語とロケールに自動的に適合するようにすることで、ネイティブ言語でデータを格納、処理、取得できます。

OracleGlobalization クラスは、ODP.NET データ プロバイダーに固有です。 クラスは、セッション、スレッド、ローカル コンピューターのグローバリゼーション設定を取得および設定するために使用されます。

次の表に、実装の概要を示します。

ODP.NET Microsoft
コンストラクター

該当なし

該当なし
メソッド

Clone()

OracleGlobalization オブジェクトのコピーを作成します。

static GetClientInfo(OracleGlobalization og)

ローカル コンピューターの Oracle グローバリゼーション設定を OracleGlobalization オブジェクトとして返します。

static GetThreadInfo()

static GetThreadInfo(OracleGlobalization og)

現在のスレッドの Oracle グローバリゼーション設定を表す OracleGlobalization インスタンスを取得または更新します。

static SetThreadInfo(OracleGlobalization og)

Oracle グローバリゼーション設定を現在のスレッドの設定に設定します。

 
プロパティ

予定表 {get; set;}

カレンダー システムを指定します。

ClientCharacterSet {get;}

クライアント文字セットを指定します。

比較 {get; set;}

PL/SQL ブロックの WHERE 句と比較の比較方法を指定します。 既定値は、ローカル コンピューターのNLS_COMP (各国語サポートの比較) 設定です。

通貨 {get; set;}

L 数値書式要素の現地通貨記号を指定します。

DateFormat {get; set;}

Oracle 日付 型の日付形式を指定します。

DateLanguage {get; set;}

日と月の名前、および日付の省略形に使用する言語を指定します。

DualCurrency {get; set;}

U 数値書式要素の二重通貨記号を指定します。

ISOCurrency {get; set;}

C 数値書式要素の国際通貨記号を指定します。

言語 {get; set;}

データベースの既定の言語を指定します。

LengthSemantics {get; set;}

バイトまたは文字 (既定) の長さのセマンティクスを使用して CHAR 列と VARCHAR2 列を作成するためのセマンティクスを指定します。これは、NLS_LENGTH_SEMANTICS パラメーターに対応します。

NCharConversionException {get; set;}

暗黙的または明示的な文字型の変換中にデータが失われた場合にエラーが発生するかどうかを指定します。

NumericCharacters {get; set;}

文字列内の数値の小数点文字とグループ区切り文字に使用される文字を指定します。

並べ替え {get; set;}

クエリ内の ORDER BY 句の照合シーケンスを指定します。 既定値は、ローカル コンピューターのNLS_SORT設定です。

Territory {get; set;}

担当区域の名前を指定します。

TimeStampFormat {get; set;}

TimeStamp データ型の文字列形式を指定します。

TimeStampTZFormat {get; set;}

TimeStampTZ データ型の文字列形式を指定します。

TimeZone {get; set;}

タイム ゾーンリージョン名の文字列形式を指定します。

 

OracleInfoMessageEventArgs と OracleInfoMessageEventHandler

OracleInfoMessageEventArgs クラスと OracleInfoMessageEventHandler クラスは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 OracleInfoMessageEventArgs クラスは、OracleConnection.InfoMessage イベントのデータを表します。 OracleInfoMessageEventHandler デリゲートは、そのイベントを処理するメソッドのシグネチャを表します。

次の表は、 OracleInfoMessageEventArgs 実装の違いをまとめたものです。

ODP.NET Microsoft
コンストラクター

該当なし

コンストラクター

該当なし

メソッド メソッド

ToString()

InfoMesage イベントの文字列表現。 実装は、 System.EventArgs クラスの メソッドをオーバーライドします。

プロパティ

エラー {get;}

OracleErrorCollection オブジェクトとしてデータ ソースによって生成されたコレクションまたはエラー。

プロパティ

コード {get;}

エラー メッセージのコード部分。

OracleParameter と OracleParameterCollection

OracleParameter クラスと OracleParameterCollection クラスは、ODP.NET と Microsoft データ プロバイダーの両方に共通です。 OracleParameter クラスは、OracleCommand へのパラメーターを表します。 実装の最も大きな違いは、ODP.NET プロバイダーによる配列のサポートです。 各プロバイダーの OracleParameter クラスは、 System.Data.IDbDataParameter インターフェイスと System.Data.IDataParameter インターフェイスを 実装します。

次の表は、OracleParameter クラスの実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター

OracleParameter(string paramName, object paramValue)

OracleParameter(string paramName, OracleDbType dataType, ParameterDirection dir)

OracleParameter(string paramName, OracleDbType dataType, object paramValue, ParameterDirection dir)

OracleParameter(string paramName, OracleDbType dataType, int size, object paramValue, ParameterDirection dir)

コンストラクター
メソッド

Clone()

OracleParameter オブジェクトのコピーを作成します。

Dispose()

パラメーター オブジェクトに割り当てられたリソースを解放します。

メソッド
プロパティ

ArrayBindSize {get; set;}

配列バインドまたは PL/SQL 連想配列実行の前後の Value プロパティの要素の入力または出力サイズを指定します。

ArrayBindStatus {get; set;}

配列バインドまたは PL/SQL 連想配列実行の前後の Value プロパティの各要素の入力または出力の状態を指定します。

CollectionType {get; set;}

パラメーターがコレクションを表すかどうかを指定します。 その場合、コレクション型は OracleCollectionType 値として指定されます。

OracleDbType {get; set;}

パラメーターのデータ型 OracleDbType を指定します。 既定値は OracleDbType.Varchar2 ですOracleDbTypeDbType がリンクされています。一方を設定すると、もう一方がサポート型に変更されます。

状態 {get; set;}

Value プロパティのデータに関連する実行の状態を指定します。 実行前に、このプロパティは Value プロパティに関連するバインドの状態を示します。 実行後、このプロパティは実行の状態を返します。 配列バインドと PL/SQL 連想配列バインドでは、このプロパティは無視されます。

プロパティ

OracleType {get; set;}

パラメーターの OracleType を 指定します。 既定値は OracleType.VarChar ですOracleTypeDbType がリンクされています。一方を設定すると、もう一方がサポート型に変更されます。

OracleParameterCollection は、OracleParameter オブジェクトのコレクションを表します。

次の表は、 OracleParameterCollection クラスの実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター

該当なし

コンストラクター

該当なし

メソッド メソッド
プロパティ Properties

IsFixedSize {get;}

コレクションが固定サイズであるかどうかを示します。

IsReadOnly {get;}

コレクションが読み取り専用かどうかを示します。

IsSynchronized {get;}

コレクションがスレッド セーフかどうかを示します。

SyncRoot {get;}

コレクションへのアクセスを同期するために使用するオブジェクトを取得します。

OracleRowUpdatedEventArgs と OracleRowUpdatedEventHandler

OracleRowUpdatedEventArgs クラスと OracleRowUpdatedEventHandler デリゲートは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 OracleRowUpdatedEventArgs クラスは、OracleDataAdapter.RowUpdated イベントのデータを表します。 OracleRowUpdatedEventHandler デリゲートは、そのイベントを処理するメソッドのシグネチャを表します。 どちらも System.Data.Common.RowUpdatedEventArgs を拡張します

ODP.NET と Microsoft データ プロバイダーによる実装には大きな違いはありません。

OracleRowUpdatingEventArgs と OracleRowUpdatingEventHandler

OracleRowUpdatingEventArgs クラスと OracleRowUpdatingEventHandler デリゲートは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 OracleRowUpdatingEventArgs クラスは、OracleDataAdapter.RowUpdating イベントのデータを表します。 OracleRowUpdatingEventHandler デリゲートは、そのイベントを処理するメソッドのシグネチャを表します。 どちらも System.Data.Common.RowUpdatingEventArgs を拡張します

ODP.NET と Microsoft データ プロバイダーによる実装には大きな違いはありません。

OracleTransaction

OracleTransaction クラスは、ODP.NET と Microsoft の両方のデータ プロバイダーに共通です。 OracleTransaction クラスは、データベースのローカル トランザクションを表します。 実装のメイン違いは、ODP.NET プロバイダーによるセーブポイントのサポートです。 各プロバイダーの OracleTransaction クラスは、 System.Data.IDbTransaction インターフェイスを 実装します。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター

該当なし

コンストラクター

該当なし

メソッド

Rollback(string savepointName)

ODP.NET プロバイダーには、 Save() メソッドを使用して作成されたセーブポイントへのトランザクションのロールバックをサポートするために、このオーバーロードがあります。

Save(string savepointName)

現在のトランザクション内にセーブポイントを作成します。

メソッド
プロパティ Properties

OracleXmlQueryProperties と OracleXmlSaveProperties [ODP.NET のみ]

OracleXmlQueryProperties クラスと OracleXmlSaveProperties クラスは、ODP.NET データ プロバイダーの両方に固有であり、Oracle データベースに対する XML 操作のサポートを提供します。

OracleXmlQueryProperties クラスは、XmlCommandType = Query の OracleCommand の XML プロパティを表します。

次の表は、 OracleXmlQueryProperties クラスの実装の概要を示しています。

ODP.NET Microsoft
コンストラクター

OracleXmlQueryProperties()

該当なし
メソッド

Clone()

OracleXmlQueryProperties オブジェクトのコピーを作成します。

 
プロパティ

MaxRows {get; set;}

結果 XML ドキュメント内の結果セット行の最大数を指定します。

RootTag {get; set;}

結果 XML ドキュメントのルート要素を指定します。

RowTag {get; set;}

結果 XML ドキュメント内のデータ行の要素名を指定します。

Xslt {get; set;}

結果の XML ドキュメントの変換に使用する XSL ドキュメントを指定します。

XsltParams {get; set;}

XSL ドキュメントのパラメーターを、名前と値のペアのセミコロンで区切られた文字列として指定します。

 

OracleXmlSaveProperties クラスは、XmlCommandType = InsertUpdate、または Delete の OracleCommand の XML プロパティを表します

次の表は、 OracleXmlSaveProperties クラスの実装の概要を示しています。

ODP.NET Microsoft
コンストラクター

OracleXmlSaveProperties()

該当なし
メソッド

Clone()

OracleXmlSaveProperties オブジェクトのコピーを作成します

 
プロパティ

KeyColumnsList {get; set;}

XML ドキュメントを使用して更新または削除する行を検索するためのキーとして使用される列の一覧を指定します。

RowTag {get; set;}

XML ドキュメント内のデータ行を識別する XML 要素の名前を指定します。

テーブル {get; set;}

変更を保存するテーブルまたはビューの名前を指定します。

UpdateColumnList {get; set;}

更新または挿入する列の一覧を指定します。

Xslt {get; set;}

XML ドキュメントの変換に使用する XSL ドキュメントを指定します。

XsltParams {get;}

XSL ドキュメントのパラメーターを、名前と値のペアのセミコロンで区切られた文字列として指定します。

 

OraclePermission と OraclePermissionAttribute [Microsoft のみ]

OraclePermission クラスと OraclePermissionAttribute クラスは、Microsoft データ プロバイダーに固有です。 OraclePermission クラスは、ユーザーが OracleDatabase にアクセスするための適切なセキュリティ レベルを持っていることを確認するのに役立ちます。 OraclePermissionAttribute クラスは、セキュリティ アクションをカスタム セキュリティ属性に関連付けます。

両方のクラスは、Microsoft データ プロバイダーが部分信頼シナリオをサポートする場合に将来使用されます。.NET Framework 1.0 および 1.1 の Microsoft Oracle データ プロバイダーでは、完全信頼の呼び出し元が必要です。

データ型のクラスと構造体

ODP.NET プロバイダーと Microsoft プロバイダーの両方に、Oracle データ型の操作に使用されるクラスと構造体のセットがあります。 次のサブセクションでは、プロバイダーによるこれらのクラスと構造体の実装の違いについて説明します。

Oracle データ列挙

ODP.NET と Microsoft プロバイダーの両方に Oracle データ型の列挙があります。 ODP.NET プロバイダーには OracleDbType 構造体があり、Microsoft プロバイダーには OracleType 構造体があります。

次の表は、両方のプロバイダーの列挙を、それらが表す Oracle データ型にマップします。

Oracle データ型 ODP.NET (OracleDbType) Microsoft (OracleType)
BFILE BFile BFile
BLOB BLOB BLOB
byte Byte Byte
CHAR Char Char
CLOB Clob Clob
DATE Date DateTime
8 バイト FLOAT Double ダブル1
2 バイト整数 Int16 Int16
4 バイト整数 Int32 Int32
8 バイト整数 Int64 N/A
INTERVAL DAY TO SECOND IntervalDS IntervalDayToSecond
INTERVAL YEAR TO MONTH IntervalYM IntervalYearToMonth
LONG Long LongVarChar
LONG RAW LongRaw LongRaw
NCHAR NChar NChar
NCLOB NClob NClob
NUMBER Decimal 数値
NVARCHAR2 NVarchar2 NVarChar
RAW Raw Raw
REF CURSOR RefCursor カーソル
ROWID N/A Rowid
4 バイト FLOAT Single Float1
TIMESTAMP TimeStamp タイムスタンプ
TIMESTAMP WITH LOCAL TIME ZONE TimeStampLTZ TimestampLocal
TIMESTAMP WITH TIME ZONE TimeStampTZ TimestampWithTZ
VARCHAR2 Varchar2 VarChar
    SByte1
    UInt161
    UInt321

1ネイティブ Oracle データ型ではありません。入力パラメーターをバインドするときにパフォーマンスを向上させるために使用されます。

Oracle BFILE

OracleBFile クラスは、ODP.NET と Microsoft データ プロバイダーの両方に共通です。 Oracle BFILE データ型を表し、データに対して操作を実行するためのメソッドを提供します。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
コンストラクター

OracleBFile(OracleConnection conn)

OracleBFile(OracleConnection conn, string bfilePath, string bfileName)

コンストラクター
メソッド

Close()

OracleBFile オブジェクトを閉じ、関連付けられているリソースを解放します。

CloseFile()

OracleBFile オブジェクトによって参照されているファイルを閉じます。

Compare(Int64 srcOffset, OracleBFile bfile, Int64 destOffset, Int64 numCompareBytes)

2 つの OracleBFile オブジェクトの相対値を返します。

CopyTo (OracleBlob BLOB)

CopyTo (OracleBlob BLOB,Int64 destOffsetBytes)

CopyTo (Int64 srcOffsetBytes,OracleBlob BLOB, Int64 destOffsetBytes, Int64, Int64 numCopyBytes)

CopyTo (OracleClob clob)

CopyTo (OracleClob clob, Int64 destOffsetBytes)

CopyTo (Int64 srcOffsetBytes、OracleClob clob、Int64 destOffsetBytes、Int64、Int64 numCopyBytes)

OracleBFile オブジェクトから別のオブジェクトにデータをコピーします。

IsEqual(OracleBFile bfile)

OracleBFile オブジェクトを別の OracleBFile オブジェクトと比較し、両方のオブジェクトが同じ外部ファイルを参照している場合は true を返します。

static MaxSize()

BFILE に含めることができる最大バイト数を返します。

OpenFile()

OracleBFile オブジェクトのディレクトリとファイル名で指定された BFILE を開きます。

Search(byte[] searchVal, Int64 offset, Int64 occurrence)

OracleBFile オブジェクトでバイナリ パターンを検索します。

メソッド

CopyTo (OracleLob lob)

CopyTo (OracleLob lob, long destOffsetBytes)

CopyTo (Int64 srcOffsetBytes, OracleLob lob, long destOffsetBytes, long, long numCopyBytes)

OracleBFile オブジェクトから別のオブジェクトにデータをコピーします。

SetFileName(string directory, string filename)

OracleBFile オブジェクトを別の BFILE に関連付けます。 データベースを更新するには、OracleDataAdapterUpdate() メソッドを呼び出します。

プロパティ

IsEmpty {get;}

BFILE が空かどうかを示します。

IsOpen {get;}

BFILEOracleBFile オブジェクトによって開かれたかどうかを示します。

DirectoryName {get; set;}

BFILE のディレクトリを指定します。

FileName {get; set;}

BFILE のファイル名を指定します。

{get; set;} の位置

BFILE ストリーム内の現在の読み取り位置を指定します。

プロパティ

IsNull {get;}

OracleBFile が null ストリームであるかどうかを示します。

DirectoryName {get;}

BFILE のディレクトリを返します。

FileName {get;}

BFILE のファイル名を返します。

{get;} の位置

BFILE ストリーム内の現在の読み取り位置を返します。

Oracle Binary

OracleBinary 構造体は、ODP.NET と Microsoft データ プロバイダーの両方に共通です。 Oracle データベースに格納されているバイナリ データの可変長ストリームを表します。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
フィールド フィールド
メソッド

ToString()

OracleBinary オブジェクトのハッシュ コードを返します。 このメソッドは、 System.Object 実装をオーバーライドします。

メソッド
プロパティ Properties

Oracle Boolean [Microsoft Only]

OracleBoolean 構造体は、Microsoft データ プロバイダーに固有です。 Oracle データ型のデータベース比較から返される値を表し、結果を操作および操作するメソッドを提供します。

次の表に、実装の概要を示します。

ODP.NET Microsoft
該当なし フィールド

static False

OracleBoolean 構造体の値に割り当てることができる false 値。

static Null

OracleBoolean 構造体の値に割り当てることができる null 値。

static One

OracleBoolean 構造体の値に割り当てることができる 1 の値。

static True

OracleBoolean 構造体の値に割り当てることができる true 値。

static Zero

OracleBoolean 構造体の値に割り当てることができる値 0

  メソッド

static And(OracleBoolean val1, OracleBoolean val2)

2 つの OracleBoolean 構造体のビットごとの AND を返します。

CompareTo(object obj)

OracleBoolean 構造体と指定したオブジェクトの相対値を返します。

Equals(object)

OracleBoolean 構造体がオブジェクトと等しいかどうかを示す値を返します。

Equals(OracleBoolean val1, OracleBoolean val2)

2 つの OracleBoolean 構造体が等しいかどうかを示す値を返します。

GetHashCode()

OracleBoolean 構造体のハッシュ コードを返します。

static NotEquals(OracleBoolean val1, OracleBoolean val2)

2 つの OracleBoolean 構造体が等しくないかどうかを示す値を返します。

static OnesComplement(OracleBoolean val)

指定した OracleBoolean 構造体の 1 の補数を返します。

static Or(OracleBoolean val1, OracleBoolean val2)

2 つの OracleBoolean 構造体のビットごとの OR を返します。

static Parse(string val)

論理値の文字列表現を OracleBoolean 構造体に変換します。

ToString()

OracleBoolean 構造体の値を文字列として返します。

static XOr(OracleBoolean val1, OracleBoolean val2)

2 つの OracleBoolean 構造体のビットごとの排他的 OR を返します。

  プロパティ

IsFalse {get;}

構造体の値が false かどうかを示 します

IsNull {get;}

構造体の値が null かどうかを示 します

IsTrue {get;}

構造体の値が true かどうかを示 します

値 {get;}

構造体の値を取得します

  オペレーター

&

2 つの OracleBoolean 構造体のビットごとの AND を返します。

|

2 つの OracleBoolean 構造体のビットごとの OR を返します。

==

2 つの OracleBoolean 構造体が等しいかどうかを示す値を返します。

^

2 つの OracleBoolean 構造体のビットごとの排他的 OR を返します。

false

OracleBoolean 構造体が false かどうかをテストするために使用されます。

!=

2 つの OracleBoolean 構造体が等しくないかどうかを示す値を返します。

!

OracleBoolean 構造体の NOT を返します。

~

OracleBoolean 構造体の 1 の補数を返します。

true

OracleBoolean 構造体が false かどうかをテストするために使用されます

bool

OracleBoolean 構造体を bool に変換します。

OracleBoolean

OracleNumberstring、または bool 値を OracleBoolean 構造体に変換します。

Oracle DATE

ODP.NET プロバイダーと Microsoft プロバイダーの両方に、Oracle DATE データ型をサポートする構造があります。 ODP.NET プロバイダーは OracleDate 構造を持ち、Microsoft プロバイダーは OracleDateTime 構造を持ちます。

次の表は、実装の違いの概要を示しています。

ODP.NET (OracleDate) Microsoft (OracleDateTime)
フィールド フィールド
メソッド

GetDaysBetween(OracleDate val)

OracleDate 構造体と指定したOracleDate 構造体の間の日数を返します。

ToOracleTimeStamp()

OracleDate 構造体を同等の OracleTimeStamp 構造体として返します。

static GetSysDate()

現在の日付と時刻の OracleDate 構造体を返します。

メソッド
プロパティ

BinData() {get;}

Oracle 内部形式の構造体を表すバイト配列。

プロパティ

ミリ秒

OracleDateTime 構造体のミリ秒部分を返します。

Oracle LOB

ODP.NET プロバイダーと Microsoft プロバイダーには、どちらも Oracle LOB データ型をサポートするクラスがあります。

ODP.NET プロバイダーには、Oracle BLOB データ型を表す OracleBlob クラスと、Oracle CLOB または NCLOB データ型を表す OracleClob クラスがあります。 Microsoft データ プロバイダーには、Oracle LOB データ (BLOBCLOBNCLOB) を表す OracleLob クラスがあります。

次の表は、実装の違いの概要を示しています。

ODP.NET (OracleBlob と OracleClob) Microsoft (OracleLob)
フィールド

static MaxSize()

LOB が保持できる最大バイト数を返します。

フィールド

Null

null OracleLob オブジェクトを表します。

メソッド

BeginChunkWrite()

書き込み用の LOB を開きます。 サーバー側プロセスは、 EndChunkWrite が呼び出されるまで実行されません。 このメソッドは、パフォーマンスを向上させるために EndChunkWrite メソッドと共に使用されます。

Compare(Int64 srcOffset, lob, Int64 destOffset, Int64 numCompareBytes

指定したオブジェクトに対する LOB の相対値を示す値を返します。

CopyTo (lob)

CopyTo (lob, Int64 destOffsetBytes)

CopyTo (Int64 srcOffsetBytes, lob, Int64 destOffsetBytes, Int64 numCopyBytes)

OracleBFile オブジェクトから別のオブジェクトにデータをコピーします。

EndChunkWrite()

書き込みのために LOB を閉じ、サーバー側のプロセスを実行できるようにします。 このメソッドは、パフォーマンスを向上させるために BeginChunkWrite メソッドと共に使用されます。

IsEqual(lob)

LOB が指定したLOB と等しいかどうかを示す値を返します。

Search(byte[] pattern, Int64 offsetBytes, Int64 occurrence)

LOB 内のバイナリ パターンの絶対オフセットを返します。

メソッド

BeginBatch

書き込み用の LOB を開きます。 サーバー側プロセスは、 EndBatch が呼び出されるまで実行されません。 このメソッドは、パフォーマンスを向上させるために EndBatch メソッドと共に使用されます。

EndBatch

書き込みのために LOB を閉じ、サーバー側のプロセスを実行できるようにします。 このメソッドは、パフォーマンスを向上させるために BeginBatch メソッドと共に使用されます。

プロパティ

IsEmpty {get;}

LOB が空かどうかを示します。

IsInChunkWriteMode {get;}

BEGINChunkWrite を使用して LOB が開かれたかどうかを示します。

IsNCLOB {get;}[OracleClob のみ]

LOBNCLOB であるかどうかを示します。

OptimumChunkSize {get;}

読み取りまたは書き込み操作中にサーバーから取得または送信する最小バイト数を示します。

プロパティ

ChunkSize {get;}

読み取りまたは書き込み操作中にサーバーから取得または送信する最小バイト数を示します。

IsBatched {get;}

BeginBatch を使用して LOB が開かれたかどうかを示します。

IsNull {get;}

LOB が null ストリームであるかどうかを示します

LobType {get;}

LOB 型を OracleType 値として返します。

Oracle NUMBER

ODP.NET プロバイダーと Microsoft プロバイダーには、どちらも Oracle NUMBER データ型をサポートするクラスがあります。 ODP.NET プロバイダーは OracleDecimal 構造を持ち、Microsoft プロバイダーは OracleNumber 構造を持ちます。

次の表は、実装の違いの概要を示しています。

ODP.NET (OracleDecimal) Microsoft (OracleNumber)
フィールド

static NegativeOne

-1 を返します。

フィールド

static E

e-2.718 を返します。

staic MinusOne

-1 を返します。

メソッド

static AdjustScale(OracleDecimal val, int digits, bool round)

指定した桁数の新しい OracleDecimal 構造体を返します。

static ConvertToPrecScale(OracleDecimal val, int precision, int scale)

指定した有効桁数と小数点以下桁数を持つ新しい OracleDecimal 構造体を返します。

static Mod(OracleDecimal val, OracleDecimal divider)

最初の OracleDecimal を 2 番目の OracleDecimal で除算した結果の剰余を返します。

メソッド

static Modulo(OracleNumber val, OracleNumber ディバイダー)

最初の OracleNumber を 2 番目OracleNumber で除算した結果として得られる剰余を返します。

プロパティ

BinData {get;}

Oracle 内部形式の構造体を表すバイト配列。

{get; set;} の形式

ToString() メソッドで使用する形式を指定します。

IsInt {get;}

構造体が整数を表すかどうかを示します。

IsPositive {get;}

構造体の値が 0 より大きいかどうかを示 します

IsZero {get;}

構造体の値が 0 かどうかを示 します

プロパティ

Oracle INTERVAL

ODP.NET プロバイダーと Microsoft プロバイダーには、Oracle INTERVAL DAY TO SECOND データ型と INTERVAL YEAR TO MONTH データ型をサポートするクラスがあります。

ODP.NET プロバイダーには、Oracle INTERVAL DAY TO SECOND データ型を表す OracleIntervalDS クラスと、Oracle INTERVAL YEAR TO MONTH データ型を表す OracleIntervalYM クラスがあります。

Microsoft プロバイダーには、Oracle INTERVAL DAY TO SECOND データ型を表す OracleTimeSpan クラスと、Oracle INTERVAL YEAR TO MONTH データ型を表す OracleMonthSpan クラスがあります。

次の表は、 OracleIntervalDS 構造体と OracleTimeSpan 構造体の実装の違いをまとめたものです。

ODP.NET (OracleIntervalDS) Microsoft (OracleTimeSpan)
フィールド

static Zero

OracleIntervalDS 構造体の 0 の値を表します。

フィールド
メソッド メソッド
プロパティ

BinData {get;}

Oracle 内部形式の構造体を表すバイト配列。

Nanoseconds {get;}

構造体のナノ秒部分。

TotalDays {get;}

構造体の部分の日数。

プロパティ
オペレーター

+

1 つの OracleIntervalDS 構造体を別の OracleIntervalDS 構造体に追加します。

-

1 つの OracleIntervalDS 構造体を別の OracleIntervalDS 構造体から減算します。

-

構造体を否定します

*

構造体に数値を乗算します。

/

構造体を数値で除算します。

オペレーター

次の表は、OracleIntervalYM 構造体と OracleMonthSpan 構造体の実装の違いの概要を示しています。

ODP.NET (OracleIntervalYM) Microsoft (OracleMonthSpan)
フィールド

static Zero

OracleIntervalYM 構造体の 0 の値を表します。

フィールド
メソッド メソッド
プロパティ

BinData {get;}

Oracle 内部形式の構造体を表すバイト配列。

月 {get;}

構造体の月部分。

TotalYears {get;}

構造体の期間の年数。

年 {get;}

構造体の年部分。

プロパティ
オペレーター

+

1 つの OracleIntervalYM 構造体を別の OracleIntervalYM 構造体に追加します。

-

1 つの OracleIntervalYM 構造体を別の OracleIntervalYM 構造体から減算します。

-

構造体を否定します。

*

構造体に数値を乗算します。

/

構造体を数値で除算します。

オペレーター

Oracle REF CURSOR [ODP.NET のみ]

OracleRefCursor クラスは、ODP.NET データ プロバイダーに固有です。 Oracle REF CURSOR データ型を表します。

次の表に、実装の概要を示します。

ODP.NET Microsoft
コンストラクター 該当なし
メソッド

Dispose()

OracleRefCursor オブジェクトに割り当てられたリソースを解放します。

GetDataReader()

REF CURSOROracleDataReader を返します。

 
プロパティ

接続 {get;}

REF CURSOR データのフェッチに使用される OracleConnection を示します。

 

Oracle 文字列

OracleString 構造体は、ODP.NET と Microsoft データ プロバイダーの両方に共通です。 Oracle データベースに格納されている文字の可変長ストリームを表します。

次の表は、実装の違いの概要を示しています。

ODP.NET Microsoft
フィールド フィールド

static Empty

構造体に割り当てることができる空の文字列。

メソッド

Clone()

OracleString インスタンスのコピーを返します。

GetNonUnicodeBytes()

クライアント文字セット形式を使用して 、OracleString インスタンスのバイト配列を返します。

GetUnicodeBytes()

OracleString インスタンスのバイト配列を Unicode 形式で返します。

メソッド
プロパティ

IsCaseIgnored {get; set;}

文字列比較で大文字と小文字を区別するかどうかを指定します。

プロパティ

Oracle TimeStamp [ODP.NET のみ]

OracleTimeStampOracleTimeStampLTZOracleTimeStampTZ 構造体は、ODP.NET データ プロバイダーと Oracle TIMESTAMP データ型のプロバイダー サポートに固有です。

OracleTimeStamp 構造体は、Oracle TIMESTAMP データ型を表します。 OracleTimeStampLTZ 構造体は、Oracle TIMESTAMP WITH LOCAL TIME ZONE データ型を表します。 OracleTimeStampTZ 構造体は、Oracle TIMESTAMP WITH TIME ZONE データ型を表します。

次の表は、3 つの構造体の実装の概要を示しています。

ODP.NET (OracleTimeStamp、OracleTimeStampLTZ、OracleTimeStampTZ) Microsoft
コンストラクター

OracleTimeStamp(DateTime dateTimeVal)

OracleTimeStamp(DateTime dateTimeVal, string timeZone) [OracleTimeStampTZ のみ]

OracleTimeStamp(string stringVal)

OracleTimeStamp(int year, int month, int day)

OracleTimeStamp(int year, int month, int day, string timeZone) [OracleTimeStampTZ のみ]

OracleTimeStamp(int year, int month, int day, int hour, int minute, int second)

OracleTimeStamp(int year, int month, int day, int hour, int minute, int second, string timeZone) [OracleTimeStampTZ のみ]

OracleTimeStamp(int year, int month, int day, int hour, int minute, int second, double millisecond)

OracleTimeStamp(int year, int month, int day, int hour, int minute, int second, double millisecond, string timeZone) [OracleTimeStampTZ のみ]

OracleTimeStamp(int year, int month, int day, int hour, int minute, int second, int nanosecond)

OracleTimeStamp(int year, int month, int day, int hour, int minute, int second, int nanosecond, string timeZone) [OracleTimeStampTZ のみ]

OracleTimeStamp(byte[] oracleInternalStructure)

該当なし
フィールド

static MaxValue

構造体の最大値。

static MinValue

構造体の最小値。

static Null

構造体に割り当てることができる null 値。

 
静的メソッド

Equals(val1, val2)

指定した構造体の値が等しいかどうかを示す値を返します。

GetLocalTimeZoneName() [OracleTimeStampLTZ のみ]

クライアントのローカル タイム ゾーン名を返します。

GetLocalTimeZoneOffset() [OracleTimeStampLTZ のみ]

クライアントのローカル タイム ゾーン オフセットを返します。

GetSysDate()

現在の日付と時刻を表す構造体を返します。

GreaterThan(val1, val2)

最初の構造体の値が 2 番目の構造体の値より大きいかどうかを判断します。

GreaterThanOrEqual(val1, val2)

最初の構造体の値が 2 番目の構造体の値以上かどうかを判断します。

LessThan(val1, val2)

最初の構造体の値が 2 番目の構造体の値より小さいかどうかを判断します。

LessThanOrEqual(val1, val2)

最初の構造体の値が 2 番目の構造体の値以下かどうかを判断します。

NotEquals(val1, val2)

2 つの構造体値が互いに等しくないかどうかを判断します。

Parse(string val)

指定した文字列から構造体を作成します。

SetPrecision(val1, int fracSecPrec)

指定した秒の小数部の有効桁数を持つ新しい構造体を返します。

 
メソッド

AddDays(double days)

指定した日数を構造体に追加します。

AddHours((double hours)

指定した時間数を構造体に追加します。

AddMilliseconds((double milliseconds)

指定したミリ秒数を構造体に追加します。

AddMinutes(double minutes)

指定した分数を 構造体に追加します。

AddMonths(long months)

指定した月数を 構造体に追加します。

AddNanoseconds(long nanoseconds)

指定したナノ秒数を構造体に追加します。

AddSeconds(double seconds)

指定した秒数を構造体に追加します。

AddYears(int years)

指定した年数を構造体に追加します。

CompareTo(object obj)

指定したオブジェクトに対する構造体の相対値を示す値を返します。

Equals(object obj)

構造体が指定したオブジェクトと同じ日付と時刻を持っているかどうかを示す値を返します。

GetHashCode()

構造体のハッシュ コードを返します。

GetDaysBetween(val)

構造体から値を減算し、結果を OracleIntervalDS 構造体として返します。

GetTimeZoneOffset() [OracleTimeStampTZ のみ]

現在の構造体の時間と分単位でタイム ゾーン情報を返します。

GetYearsBetween(val)

構造体から値を減算し、結果を OracleIntervalYM 構造体として返します。

ToLocalTime() [OracleTimeStampTZ のみ]

構造体を現地時刻に変換します。

ToOracleDate()

構造体を OracleDate 構造体に変換します。

ToOracleTimeStamp() [OracleTimeStampLTZ と OracleTimeStampTZ のみ]

構造体を OracleTimeStamp 構造体に変換します。

ToOracleTimeStampLTZ() [OracleTimeStamp と OracleTimeStampTZ のみ]

構造体を OracleTimeStampLTZ 構造体に変換します。

ToOracleTimeStampTZ() [OracleTimeStamp と OracleTimeStampLTZ のみ]

構造体を OracleTimeStampTZ 構造体に変換します。

ToString()

構造体を文字列に変換します。 このメソッドは、 System.Object の実装をオーバーライドします。

ToUniversalTime() [OracleTimeStampLTZ と OracleTimeStampTZ のみ]

現地時刻を OracleTimeStampTZ 構造体として協定世界時 (UTC) に変換します。

 
プロパティ

BinData {get;}

Oracle 内部形式で構造体を表すバイト配列。

日 {get;}

構造体の日部分。

IsNull {get;}

構造体に null 値があるかどうかを示します。

時間 {get;}

構造体の時間部分。

ミリ秒 {get;}

構造体のミリ秒部分。

分 {get;}

構造体の分部分。

月 {get;}

構造体の月部分。

Nanosecond {get;}

構造体のナノ秒部分。

2 番目の {get;}

構造体の 2 番目の部分。

TimeZone {get;}[OracleTimeStampTZ のみ]

構造体のタイム ゾーン。

値 {get;}

DateTime データ型としての構造体の値。

年 {get;}

構造の年部分。

 
オペレーター

+

指定した値を 構造体に追加します。

==

2 つの構造体値が等しいかどうかを判断します。

>

2 つの構造体の最初の値が 2 番目の構造体の値より大きいかどうかを判断します。

>=

2 つの構造体の最初の値が 2 番目の構造体の値以上かどうかを判断します。

!=

2 つの構造体値が等しくないかどうかを判断します。

<

2 つの構造体の最初の値が 2 番目の構造体の値より小さいかどうかを判断します。

<=

2 つの構造体の最初の値が 2 番目の構造体の値以下かどうかを判断します。

-

構造体から指定した値を減算します。

 

Oracle XMLType [ODP.NET のみ]

ODP.NET プロバイダーには、Oracle XMLType データ型 (OracleXmlTypeOracleXmlStream) をサポートする 2 つのクラスがあります。

OracleXmlType クラスは、XML スキーマのない XML ドキュメントと XML フラグメントの両方をサポートする Oracle XMLType データ型を表します。 次の表に、実装の概要を示します。

ODP.NET Microsoft
コンストラクター

OracleXmlType(OracleClob clob)

OracleXmlType(OracleConnection conn, string xmlData)

OracleXmlType(OracleConnection conn, XmlReader xr)

OracleXmlType(OracleConnection conn, XmlDocument xd)

該当なし
メソッド

Clone()

OracleXmlType オブジェクトのコピーを作成します。

Dispose()

OracleXmlType オブジェクトに割り当てられたリソースを解放します。

Extract(string xpathExpr, string namespaceMap)

Extract(string xpathExpr, XmlNameSpaceManager nsMgr)

XPath 式に基づいて OracleXmlType オブジェクトに格納されているデータのサブセットを抽出します。

GetStream()

OracleXmlType オブジェクトに格納されているデータの OracleXmlStream を返します。

GetXmlDocument()

OracleXmlType オブジェクトに格納されているデータの XmlDocument を返します。

GetXmlReader()

OracleXmlType オブジェクトに格納されているデータの XmlTextReader を返します。

IsExists(string xpathExpr, string namespaceMap)

IsExists(string xpathExpr, XmlNameSpaceManager nsMgr)

XPath 式で識別されるノードが OracleXmlType オブジェクトに存在するかどうかを返します。

Transform(OracleXmlType xslDoc, string paramMap)

Transform(string xslDoc, string paramMap)

XSL ドキュメントを使用して 、OracleXmlType オブジェクトを別 の OracleXmlType オブジェクトに変換します。 paramMap パラメーターは、現在のリリースでは無視されます。

Update(string xpathExpr, string nsMap, string val)

Update(string xpathExpr, XmlNameSpaceMgr xnsMgr, string val)

Update(string xpathExpr, string nsMap, OracleXmlType val)

Update(string xpathExpr, XmlNameSpaceMgr xnsMgr, OracleXmlType val)

XPath 式で指定された OracleXmlType オブジェクト内のノードまたはフラグメントを更新します。

 
プロパティ

接続 {get;}

Xml データを OracleXmlType に取得するために使用される OracleConnection

IsEmpty {get;}

OracleXmlType が空かどうかを示します。

IsFragment {get;}

OracleXmlType が整形式の XML ドキュメントではなく XML 要素のコレクションであるかどうかを示します。

IsSchemaBased {get;}

OracleXmlType が XML スキーマに基づいているかどうかを示します。

値 {get;}

OracleXmlType 内の XML データを含む文字列を返します。

 

OracleXmlStream クラスは、ODP.NET データ プロバイダーに固有です。 OracleXmlType オブジェクトに格納されているデータの読み取り専用ストリームを表します。 クラスは System.IO.Stream を拡張します。

次の表に、実装の概要を示します。

ODP.NET Microsoft
コンストラクター

OracleXmlStream(OracleXmlType xmlType)

該当なし
メソッド

Clone()

OracleXmlStream オブジェクトのコピーを作成します。

Close()

OracleXmlStream を閉じ、オブジェクトに割り当てられたリソースを解放します。

Dispose()

OracleXmlStream オブジェクトに割り当てられたリソースを解放します。

 
プロパティ

CanRead {get;}

XML ストリームを読み取ることができるかどうかを示します。

CanSeek {get;}

XML ストリームが後方シーク操作と前方シーク操作をサポートするかどうかを示します。

接続 {get;}

XML データの取得に使用される OracleConnection

長さ {get;}

XML ストリーム内のバイト数。

{get; set;} の位置

ストリーム内の位置 (バイト単位)。

値 {get;}

ストリーム内の最初の文字から始まる文字列としての XML データ。