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