Partage via


Exécuter l’opération SQLEXECUTE dans Oracle Database à l’aide du modèle de service WCF

L’adaptateur Microsoft BizTalk pour Oracle Database expose un ensemble standard d’opérations sur les artefacts de base de données Oracle. À l’aide de ces opérations, vous pouvez effectuer des opérations telles que l’appel d’une fonction ou d’une procédure Oracle, ou effectuer des opérations de base en langage de manipulation de données SQL (DML) sur des tables. Toutefois, il peut y avoir des scénarios pilotés par votre logique métier qui vous obligent à effectuer des opérations que l’adaptateur Oracle Database ne présente pas. Par exemple, vous pouvez :

  • Effectuer une opération sur les artefacts de base de données qui ne sont pas exposés par l’adaptateur Oracle Database ; par exemple, obtenez la valeur CURVAL ou NEXTVAL d’une séquence Oracle.

  • Effectuer des opérations de langage de définition de données ; par exemple, créez une table.

  • Effectuer des opérations sur un artefact de base de données qui n’était pas présent au moment du design ; par exemple, mettez à jour les enregistrements dans une table temporaire créée par votre logique métier.

  • Effectuer des opérations DML plus complexes sur les tables que les opérations exposées par l’adaptateur Oracle Database ; par exemple, pour exécuter une requête qui inclut une clause JOIN.

    Pour ces types de scénarios, l’adaptateur Oracle Database expose l’opération SQLEXECUTE. À l’aide de l’opération SQLEXECUTE, vous pouvez effectuer une instruction SQL paramétrable sur la base de données Oracle. L’opération SQLEXECUTE prend en charge un bloc de paramètres d’entrée composé de jeux de paramètres qui vous permettent d’exécuter la même instruction SQL une fois pour chaque jeu. L’opération SQLEXECUTE retourne les résultats de l’instruction SQL dans un jeu d’enregistrements générique.

À propos des exemples utilisés dans cette rubrique

Les exemples de cette rubrique utilisent une séquence Oracle nommée TID_SEQ. Un script pour générer cette SÉQUENCE est fourni avec les exemples du SDK. Pour plus d’informations sur les exemples de KIT de développement logiciel (SDK), consultez Exemples dans le Kit de développement logiciel (SDK).

Classe de client WCF

Le modèle de service WCF génère un client WCF dédié, SQLEXECUTEClient, pour l’opération SQLEXECUTE. Le code suivant montre le SQLEXECUTEClient et la signature de la méthode que vous appelez pour appeler l’opération SQLEXECUTE.

public partial class SQLEXECUTEClient : System.ServiceModel.ClientBase<SQLEXECUTE>, SQLEXECUTE {  
  
    ...  
  
    public microsoft.lobservices.oracledb._2007._03.GenRecordRow[] SQLEXECUTE(string SQLSTATEMENT, string PARAMETERSCHEMA, microsoft.lobservices.oracledb._2007._03.PARAMETERDATA[] PARAMETERSET);   
}  

L’opération SQLEXECUTE retourne un jeu d’enregistrements générique. Ce jeu d’enregistrements contient les valeurs (le cas échéant) retournées par les instructions exécutées par l’opération SQLEXECUTE. Vous pouvez passer des ensembles de paramètres d’entrée à l’opération SQLEXECUTE dans une collection d’objets PARAMETERDATA, chacun contenant une collection de paramètres d’entrée représentée sous forme de chaînes. Le code suivant montre la définition d’un jeu PARAMETERDATA.

namespace microsoft.lobservices.oracledb._2007._03 {  
    using System.Runtime.Serialization;  
  
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]  
    [System.Runtime.Serialization.DataContractAttribute()]  
    public partial class PARAMETERDATA : object, System.Runtime.Serialization.IExtensibleDataObject {  
  
        ...  
  
        private string[] PARAMETERField;  
  
        ...  
  
        [System.Runtime.Serialization.DataMemberAttribute()]  
        public string[] PARAMETER {  
            get {  
                return this.PARAMETERField;  
            }  
            set {  
                this.PARAMETERField = value;  
            }  
        }  
    }  
}  

Appel de l’opération SQLEXECUTE

Pour appeler l’opération SQLEXECUTE à l’aide d’un client WCF, procédez comme suit.

  1. Générez une classe SQLEXECUTEClient pour la table ou la vue cible.

    Important

    L’opération SQLEXECUTE est exposée sous le nœud racine (/) dans le volet Sélectionner une catégorie de la boîte de dialogue Ajouter une référence de service d’adaptateur .

  2. Créez un instance de la classe SQLEXECUTEClient et appelez la méthode SQLEXECUTE pour exécuter des instructions SQL sur la base de données Oracle.

    Pour plus d’informations sur la création d’une classe de client WCF et l’appel d’opérations sur l’adaptateur Oracle Database, consultez Vue d’ensemble du modèle de service WCF avec l’adaptateur Oracle Database.

    L’exemple suivant utilise SQLEXECUTEClient pour obtenir la valeur suivante d’une séquence Oracle, TID_SEQ, en exécutant l’instruction SQL suivante : SELECT tid_seq.nextval id from DUAL. La sortie est ensuite écrite dans la console.

using (SQLEXECUTEClient sqlClient = new SQLEXECUTEClient("OracleDBBinding_SQLEXECUTE"))  
{  
    sqlClient.ClientCredentials.UserName.UserName = "SCOTT";  
    sqlClient.ClientCredentials.UserName.Password = "TIGER";  
    try  
    {  
        sqlClient.Open();  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Error opening SQL client " + ex.Message);  
        throw;  
    }  
    microsoft.lobservices.oracledb._2007._03.GenRecordRow[] sequenceRec =   
        new microsoft.lobservices.oracledb._2007._03.GenRecordRow[0];  
  
    try  
    {  
        sequenceRec = sqlClient.SQLEXECUTE("SELECT tid_seq.nextval id from DUAL", null, null);  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Error executing SQL client " + ex.Message);  
        throw;  
    }  
  
    if (sequenceRec.Length > 0)  
    {  
        Console.WriteLine("TID_SEQUENCE value is {0}", sequenceRec[0].GenRecordColumn[0].ColumnValue);  
    }  
    else  
    {  
    Console.WriteLine("Couldn't get next TID_SEQUENCE value");  
    }  
}  

Voir aussi

Développer des applications Oracle Database à l’aide du modèle de service WCF