Cette documentation est archivée et n’est pas conservée.

OracleDataAdapter, classe

Mise à jour : novembre 2007

Représente un ensemble de commandes de données et une connexion à une base de données qui permettent de remplir DataSet et de mettre à jour la base de données. Cette classe ne peut pas être héritée.

Espace de noms :  System.Data.OracleClient
Assembly :  System.Data.OracleClient (dans System.Data.OracleClient.dll)

public sealed class OracleDataAdapter : 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 joue le rôle de pont entre le groupe de données et une base de données pour la récupération et l'enregistrement de données. OracleDataAdapter fournit ce pont en utilisant Fill pour charger les données de la base de données vers DataSet, et en utilisant Update pour renvoyer à la source de données les modifications apportées à DataSet.

Lorsque OracleDataAdapter remplit DataSet, il crée les tables et colonnes nécessaires pour les données retournées si elles n'existent pas encore. Cependant, les informations de clés primaires ne sont pas incluses dans le schéma créé implicitement, à moins que la propriété MissingSchemaAction ait la valeur AddWithKey. Vous pouvez également laisser OracleDataAdapter créer le schéma de DataSet, comprenant les informations de clés primaires, avant de le remplir avec les données à l'aide de FillSchema. Pour plus d'informations, consultez Ajout de contraintes existantes à un DataSet (ADO.NET).

Remarque :

Par défaut, les champs numériques importés vers un DataTable avec Fill sont mappés aux objets OracleNumber. Il est possible de dépasser le OracleNumber et de lever une exception Oracle, en important une valeur numérique non intégrale qui est soit trop grande, soit d'une précision trop élevée pour les limitations de précision du OracleNumber. Pour plus d'informations, consultez la description de OracleNumber.

OracleDataAdapter comprend également les propriétés SelectCommand, InsertCommand, DeleteCommand, UpdateCommand et TableMappings pour faciliter le chargement et la mise à jour des données.

Le fournisseur de données .NET Framework pour Oracle ne prend pas en charge les instructions SQL regroupées par lots. Cependant, il autorise l'utilisation de plusieurs paramètres de sortie REF CURSOR pour remplir un groupe de données, chacun dans son propre DataTable. Vous devez définir les paramètres, les marquer en tant que paramètres de sortie et indiquer que ce sont des types de données REF CURSOR. Notez que vous ne pouvez pas utiliser la méthode Update lorsque le OracleDataAdapter est rempli à l'aide de paramètres REF CURSOR retournés par une procédure stockée, car Oracle ne fournit pas les informations nécessaires permettant de déterminer le nom de table et les noms de colonnes lors de l'exécution de l'instruction SQL. L'exemple C# suivant suppose que vous avez créé cette procédure stockée.

Créez le package Oracle suivant sur le serveur 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;
/

Créez le corps du package Oracle suivant sur le serveur 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;
 /

L'exemple C# suivant montre comment obtenir des informations relatives aux tables et colonnes à l'aide de la procédure stockée.

// 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);

L'exemple Visual Basic suivant montre comment utiliser OracleDataAdapter pour remplir DataSet à l'aide d'un REF CURSOR Oracle. Ces exemples utilisent des tables qui sont définies dans le schéma Oracle Scott/Tiger, et requièrent le package et le corps de package PL/SQL ci-dessous. Vous devez les créer sur votre serveur pour pouvoir utiliser les exemples.

Créez le package Oracle suivant sur le serveur 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;
/

Créez le corps du package Oracle suivant sur le serveur 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;
 /

Cet exemple Visual Basic exécute une procédure stockée PL/SQL qui retourne deux paramètres REF CURSOR, et remplit DataSet avec les lignes qui sont retournées.


' 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)

Après avoir utilisé OracleDataAdapter pour réaliser une opération Fill ou FillSchema, la propriété DataColumn.ReadOnly retourne toujours false, qu'une colonne puisse être mise à jour ou non, car le serveur Oracle ne retourne pas cette information.

Tous les membres static (Shared en Visual Basic) publics de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professionnel Édition x64, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

Le .NET Framework et le .NET Compact Framework ne prennent pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

.NET Framework

Pris en charge dans : 3.5, 3.0, 2.0, 1.1
Afficher: