Partager via


Exécuter une opération d’insertion dans oracle Database à l’aide du modèle de canal WCF

Cette section montre comment insérer un enregistrement dans une base de données Oracle à l’aide d’un canal. Vous devez spécifier à la fois un corps de message et une action de message lorsque vous envoyez un message.

Message d’insertion

Le code XML suivant montre un corps de message pour une opération Insert sur le hr. Table EMPLOYEES. Le jeu d’enregistrements se compose d’un seul enregistrement d’employé. Pour plus d’informations sur le schéma d’un message d’insertion, consultez Schémas de message pour les opérations d’insertion, de mise à jour, de suppression et de sélection de base sur les tables et les vues. Il s’agit du contenu du fichier Employee_Insert.xml utilisé dans l’exemple.

<!-- New namespace: http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES -->  
<Insert xmlns="http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES">  
    <RECORDSET xmlns:i="http://www.w3.org/2001/XMLSchema-instance">  
        <EMPLOYEESRECORDINSERT>  
            <EMPLOYEE_ID>0</EMPLOYEE_ID>  
            <FIRST_NAME>Anton</FIRST_NAME>  
            <LAST_NAME>Kirilov</LAST_NAME>  
            <EMAIL></EMAIL>  
            <PHONE_NUMBER>555-0198</PHONE_NUMBER>  
            <HIRE_DATE>2007-03-01T00:00:00.0000000</HIRE_DATE>  
            <JOB_ID>FI_ACCOUNT</JOB_ID>  
            <SALARY>5000</SALARY>  
            <COMMISSION_PCT>0.15</COMMISSION_PCT>  
            <MANAGER_ID>108</MANAGER_ID>  
            <DEPARTMENT_ID>100</DEPARTMENT_ID>  
       </EMPLOYEESRECORDINSERT>  
    </RECORDSET>  
</Insert>  

Spécification de l’action de message

Vous devez spécifier une action de message lorsque vous envoyez un message SOAP à l’adaptateur Oracle Database. Vous pouvez spécifier l’action de message lorsque vous créez le message comme dans l’exemple suivant.

Message messageIn2 = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES/Insert", readerIn2);  

L’action de message dans cet exemple, « /HR/Table/EMPLOYEES/Insert », spécifie qu’une opération Insert sur le HR. La table EMPLOYEES doit être exécutée

Envoi du message d’insertion

Cet exemple montre comment effectuer une opération Insert sur une table Oracle sur un canal. Le code utilise l’opération SQLEXECUTE exposée par l’adaptateur Oracle Database pour retourner la valeur suivante d’une séquence Oracle. Cette valeur est ensuite écrite dans le champ EMPLOYEE_ID dans l’enregistrement Insert. Ce modèle vous permet d’insérer des lignes dans des bases de données qui ont une valeur de clé primaire générée automatiquement. Pour plus d’informations sur l’appel de l’opération SQLEXECUTE sur un canal, consultez Exécuter une opération SQLEXECUTE à l’aide du modèle de canal WCF.

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Xml;  
using System.IO;  
  
using System.ServiceModel;  
using System.ServiceModel.Channels;  
  
using Microsoft.ServiceModel.Adapters;  
using Microsoft.Adapters.OracleDB;  
  
namespace OracleDMLChannel  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            // Create Endpoint  
            EndpointAddress address = new EndpointAddress("oracledb://ADAPTER");  
  
            // Create Binding  
            OracleDBBinding binding = new OracleDBBinding();  
  
            // Create Channel Factory  
            ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, address);  
            factory.Credentials.UserName.UserName = "HR";  
            factory.Credentials.UserName.Password = "TIGER";  
            factory.Open();  
  
            // Create Request Channel  
            IRequestChannel channel = factory.CreateChannel();  
            channel.Open();  
  
            // Send Request  
            System.Xml.XmlReader readerIn = System.Xml.XmlReader.Create("SQLExecute.xml");  
  
            Message messageIn = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE", readerIn);  
            Message messageOut = channel.Request(messageIn);  
  
            // Get Response XML  
            XmlReader readerOut = messageOut.GetReaderAtBodyContents();  
  
            // Get Employee ID  
            string id = null;  
            XmlDocument doc = new XmlDocument();  
            doc.Load(readerOut);  
            XmlNodeList list = doc.GetElementsByTagName("ColumnValue");  
            if (list.Count > 0) id = list[0].InnerXml;  
  
            // Compose Insert XML  
            XmlDocument insertDoc = new XmlDocument();  
            insertDoc.Load("Employee_Insert.xml");  
  
            // Change Employee ID  
            XmlNodeList empidList = insertDoc.GetElementsByTagName("EMPLOYEE_ID");  
            XmlNode empidNode = empidList[0];  
            empidNode.InnerXml = id;  
  
            // Change email  
            XmlNodeList emailList = insertDoc.GetElementsByTagName("EMAIL");  
            XmlNode emailNode = emailList[0];  
            emailNode.InnerXml = "scotty" + id + "@microsoft.com";  
  
            // Change date  
            XmlNodeList dateList = insertDoc.GetElementsByTagName("HIRE_DATE");  
            XmlNode dateNode = dateList[0];  
            dateNode.InnerXml = "2007-03-01T00:00:00.0000000";  
  
            StringReader strReader = new StringReader(insertDoc.InnerXml);  
            XmlReader readerIn2 = XmlReader.Create(strReader);  
  
            // Send XML  
            Message messageIn2 = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES/Insert ", readerIn2);  
            Message messageOut2 = channel.Request(messageIn2);  
  
            // Close the messages  
            messageOut.Close();  
            messageOut2.Close();  
  
            channel.Close();  
        }  
    }  
}  

Voir aussi

Développer des applications Oracle Database à l’aide du modèle de canal WCF
Créer un canal à l’aide d’Oracle Database
Exécuter une opération SQLEXECUTE à l’aide du modèle de canal WCF
Appeler une fonction dans Oracle Database à l’aide du modèle de canal WCF