ORACLEDATAADAPTERクラスとは? わかりやすく解説

OracleDataAdapter クラス

DataSet へのデータ格納およびデータベース更新使用される一連のデータ コマンドおよびデータベース接続表します。このクラス継承できません。

名前空間: System.Data.OracleClient
アセンブリ: System.Data.OracleClient (system.data.oracleclient.dll 内)
構文構文

Public NotInheritable Class
 OracleDataAdapter
    Inherits DbDataAdapter
    Implements IDbDataAdapter, IDataAdapter, ICloneable
Dim instance As OracleDataAdapter
public sealed class OracleDataAdapter : DbDataAdapter,
 IDbDataAdapter, IDataAdapter, ICloneable
public ref class OracleDataAdapter sealed :
 public DbDataAdapter, IDbDataAdapter, IDataAdapter, ICloneable
public final class OracleDataAdapter extends
 DbDataAdapter implements IDbDataAdapter, IDataAdapter, 
    ICloneable
public final class OracleDataAdapter extends
 DbDataAdapter implements IDbDataAdapter, IDataAdapter, 
    ICloneable
解説解説

OracleDataAdapter は、DataSetデータベースの間でデータ取得および保存するための、ブリッジの役割果たしますOracleDataAdapter は、このブリッジ提供するために、データベース内のデータDataSet読み込む Fill、および DataSet での変更データベース送り返す Update使用します

OracleDataAdapter は、DataSetデータ読み込むときに、返されデータ格納するテーブルおよび列が存在しない場合は、それらを作成します。ただし、MissingSchemaAction プロパティを AddWithKey に設定しない限り暗黙的に作成されスキーマには主キー情報設定されません。DataSetデータ格納する前に、FillSchema を使用して主キー情報を含むスキーマOracleDataAdapter作成させることもできます詳細については、「DataSet への既存制約追加」を参照してください

メモメモ

既定では、Fill使用して DataTable にインポートされる数値フィールドは、OracleNumber オブジェクト割り当てられます。OracleNumber有効桁数制限に対して大きすぎる桁数が多すぎるかのいずれかである非整数値をインポートすることで、OracleNumberオーバーフローさせて Oracle例外スローできます詳細については、OracleNumber説明参照してください

OracleDataAdapter には、データ読み込み更新効率的に行うために、SelectCommand、InsertCommand、DeleteCommand、UpdateCommand、TableMappings の各プロパティ用意されています。

.NET Framework Oracleデータ プロバイダは、バッチ SQL ステートメントサポートしません。ただし、複数REF CURSOR 出力パラメータ使用して、各 DataTableDataSetデータ格納できますパラメータ定義し定義したパラメータ出力パラメータとしてマークしREF CURSOR データ型であることを示す必要がありますOracleDataAdapter が、ストアド プロシージャ返される REF CURSOR パラメータ使用して格納されている場合Update メソッド使用できません。Oracle では SQL ステートメント実行時テーブルと列名を判別するために必要な情報提供されないためです。次の C# の例は、このストアド プロシージャが既に作成されていることを前提としています。

Oracle サーバーで、次の Oracle パッケージ作成します

CREATE OR REPLACE PACKAGE CURSPKG AS 
   TYPE T_CURSOR IS REF CURSOR; 
   PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER, 
      IO_CURSOR OUT T_CURSOR); 
   PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR, 
      DEPTCURSOR OUT T_CURSOR);
END CURSPKG;
/

Oracle サーバーで、次の Oracle パッケージ本体作成します

CREATE OR REPLACE PACKAGE BODY CURSPKG AS 
    PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER, 
                               IO_CURSOR OUT T_CURSOR) 
    IS 
        V_CURSOR T_CURSOR; 
    BEGIN 
        IF N_EMPNO <> 0 THEN 
             OPEN V_CURSOR FOR 
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 
                  FROM EMP, DEPT 
                  WHERE EMP.DEPTNO = DEPT.DEPTNO 
                        AND EMP.EMPNO = N_EMPNO; 
        ELSE 
             OPEN V_CURSOR FOR 
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 
                  FROM EMP, DEPT 
                  WHERE EMP.DEPTNO = DEPT.DEPTNO; 
        END IF; 
        IO_CURSOR := V_CURSOR; 
    END OPEN_ONE_CURSOR; 
    PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR, 
                                DEPTCURSOR OUT T_CURSOR) 
    IS 
        V_CURSOR1 T_CURSOR; 
        V_CURSOR2 T_CURSOR; 
    BEGIN 
        OPEN V_CURSOR1 FOR SELECT * FROM EMP; 
        OPEN V_CURSOR2 FOR SELECT * FROM DEPT; 
        EMPCURSOR  := V_CURSOR1; 
        DEPTCURSOR := V_CURSOR2; 
    END OPEN_TWO_CURSORS; 
END CURSPKG;
 /

ストアド プロシージャ使用してテーブルと列情報取得する C# の例を次に示します

// GetConnectionString() returns a connection string for
// the data source.

string connString = GetConnectionString();
DataSet ds = new DataSet();
OracleConnection conn = new OracleConnection(connString);
OracleCommand cmd = conn.CreateCommand();

cmd.CommandText = "CURSPKG.OPEN_TWO_CURSORS";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("EMPCURSOR", OracleType.Cursor).Direction = 
       ParameterDirection.Output;
cmd.Parameters.Add("DEPTCURSOR", OracleType.Cursor).Direction = 
       ParameterDirection.Output;

OracleDataAdapter da = new OracleDataAdapter(cmd);
da.TableMappings.Add("Table", "Emp");
da.TableMappings.Add("Table1", "Dept");
da.Fill(ds);

ds.Relations.Add("EmpDept", ds.Tables["Dept"].Columns["Deptno"],
 
      ds.Tables["Emp"].Columns["Deptno"], false);

OracleDataAdapter で、OracleREF CURSOR使用して DataSetデータ格納する Visual Basic の例を次に示します。この例では、Oracle の Scott/Tiger スキーマ定義されテーブル使用し次の PL/SQL パッケージパッケージ本体を必要とします。例で使用するために、これらをサーバー側で作成する必要があります

Oracle サーバーで、次の Oracle パッケージ作成します

CREATE OR REPLACE PACKAGE CURSPKG AS 
   TYPE T_CURSOR IS REF CURSOR; 
   PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER, 
      IO_CURSOR OUT T_CURSOR); 
   PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR, 
      DEPTCURSOR OUT T_CURSOR);
END CURSPKG;
/

Oracle サーバーで、次の Oracle パッケージ本体作成します

CREATE OR REPLACE PACKAGE BODY CURSPKG AS 
    PROCEDURE OPEN_ONE_CURSOR (N_EMPNO IN NUMBER, 
                               IO_CURSOR OUT T_CURSOR) 
    IS 
        V_CURSOR T_CURSOR; 
    BEGIN 
        IF N_EMPNO <> 0 THEN 
             OPEN V_CURSOR FOR 
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 
                  FROM EMP, DEPT 
                  WHERE EMP.DEPTNO = DEPT.DEPTNO 
                        AND EMP.EMPNO = N_EMPNO; 
        ELSE 
             OPEN V_CURSOR FOR 
             SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 
                  FROM EMP, DEPT 
                  WHERE EMP.DEPTNO = DEPT.DEPTNO; 
        END IF; 
        IO_CURSOR := V_CURSOR; 
    END OPEN_ONE_CURSOR; 
    PROCEDURE OPEN_TWO_CURSORS (EMPCURSOR OUT T_CURSOR, 
                                DEPTCURSOR OUT T_CURSOR) 
    IS 
        V_CURSOR1 T_CURSOR; 
        V_CURSOR2 T_CURSOR; 
    BEGIN 
        OPEN V_CURSOR1 FOR SELECT * FROM EMP; 
        OPEN V_CURSOR2 FOR SELECT * FROM DEPT; 
        EMPCURSOR  := V_CURSOR1; 
        DEPTCURSOR := V_CURSOR2; 
    END OPEN_TWO_CURSORS; 
END CURSPKG;
 /

この Visual Basic の例では、2 つREF CURSOR パラメータ返すストアド プロシージャ実行し返された行データDataSet格納します

' GetConnectionString() returns a connection string for
' the data source.

    Dim connString As New
 String(GetConnectionString())
    Dim ds As New DataSet()
    Dim conn As New OracleConnection(connString)
    Dim cmd As OracleCommand = conn.CreateCommand()

    cmd.CommandText = "CURSPKG.OPEN_TWO_CURSORS"
    cmd.CommandType = CommandType.StoredProcedure
    cmd.Parameters.Add("EMPCURSOR", OracleType.Cursor).Direction
 = _
       ParameterDirection.Output
    cmd.Parameters.Add("DEPTCURSOR", OracleType.Cursor).Direction
 = _
       ParameterDirection.Output

    Dim da As New OracleDataAdapter(cmd)
    da.TableMappings.Add("Table", "Emp")
    da.TableMappings.Add("Table1", "Dept")
    da.Fill(ds)

    ds.Relations.Add("EmpDept", ds.Tables("Dept").Columns("Deptno"),
 _
      ds.Tables("Emp").Columns("Deptno"),
 False)

OracleDataAdapter使用して Fill または FillSchema 操作実行すると、DataColumn.ReadOnly プロパティは、列が更新できるかどうかに関係なく、常に false返しますOracle サーバーからはこの情報返されないためです。

継承階層継承階層
System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Data.Common.DataAdapter
         System.Data.Common.DbDataAdapter
          System.Data.OracleClient.OracleDataAdapter
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバ場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
OracleDataAdapter メンバ
System.Data.OracleClient 名前空間
OracleConnection クラス
OracleCommand クラス


このページでは「.NET Framework クラス ライブラリ リファレンス」からORACLEDATAADAPTERクラスを検索した結果を表示しています。
Weblioに収録されているすべての辞書からORACLEDATAADAPTERクラスを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からORACLEDATAADAPTERクラス を検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「ORACLEDATAADAPTERクラス」の関連用語

ORACLEDATAADAPTERクラスのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ORACLEDATAADAPTERクラスのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2025 Microsoft.All rights reserved.

©2025 GRAS Group, Inc.RSS