Ejecutar una operación de inserción en la base de datos de Oracle mediante el modelo de canal WCF
En esta sección se muestra cómo insertar un registro en una base de datos de Oracle mediante un canal. Debe especificar un cuerpo del mensaje y una acción de mensaje al enviar un mensaje.
Insertar mensaje
El siguiente CÓDIGO XML muestra un cuerpo del mensaje para una operación de inserción en el rr. HH. Tabla EMPLOYEES. El conjunto de registros consta de un único registro de empleado. Para obtener más información sobre el esquema de un mensaje de inserción, vea Esquemas de mensaje para las operaciones básicas de inserción, actualización, eliminación y selección de tablas y vistas. Este es el contenido del archivo Employee_Insert.xml usado en el ejemplo.
<!-- 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>
Especificar la acción de mensaje
Debe especificar una acción de mensaje al enviar un mensaje SOAP al adaptador de base de datos de Oracle. Puede especificar la acción de mensaje al crear el mensaje como en el ejemplo siguiente.
Message messageIn2 = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES/Insert", readerIn2);
La acción de mensaje de este ejemplo, "/HR/Table/EMPLOYEES/Insert", especifica que una operación De inserción en el rr. HH. La tabla EMPLOYEES se va a realizar
Enviar el mensaje de inserción
En este ejemplo se muestra cómo realizar una operación de inserción en una tabla de Oracle a través de un canal. El código usa la operación SQLEXECUTE expuesta por el adaptador de Oracle Database para devolver el siguiente valor de una secuencia de Oracle. A continuación, este valor se escribe en el campo EMPLOYEE_ID del registro Insertar. Este patrón permite insertar filas en bases de datos que tienen un valor de clave principal generado automáticamente. Para obtener más información sobre cómo invocar la operación SQLEXECUTE a través de un canal, vea Ejecutar una operación SQLEXECUTE mediante el modelo 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();
}
}
}
Consulte también
Desarrollo de aplicaciones de base de datos de Oracle con el modelo de canal WCF
Creación de un canal mediante Oracle Database
Ejecutar una operación SQLEXECUTE mediante el modelo de canal WCF
Invocar una función en la base de datos de Oracle mediante el modelo de canal WCF