Ejecución de una operación SQLEXECUTE en oracle Database mediante el modelo de canal WCF
En esta sección se muestra cómo realizar una operación SQLEXECUTE en una base de datos de Oracle a través de un canal. Debe especificar un mensaje y una acción de mensaje en el mensaje SOAP. Para obtener más información sobre la operación SQLEXECUTE, vea Ejecutar la operación SQLEXECUTE en Oracle Database mediante el modelo de servicio WCF.
Mensaje SQLEXECUTE
El siguiente XML muestra un mensaje SQLEXECUTE que devuelve el siguiente valor de una secuencia de Oracle.
<?xml version="1.0" encoding="utf-8" ?>
<!-- New Action: http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE -->
<SQLEXECUTE xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE">
<SQLSTATEMENT>SELECT tid_seq.nextval id FROM dual</SQLSTATEMENT>
</SQLEXECUTE>
SQLEXECUTE puede especificar un elemento de esquema de parámetros y un bloque de parámetros que contiene varios conjuntos de datos de parámetros. El mensaje que se muestra es para una sola invocación de la instrucción SQL especificada, por lo que los elementos que especifican el esquema de parámetros y el bloque de parámetros se omiten del cuerpo del mensaje. Para obtener información sobre el esquema de mensajes para la operación SQLEXECUTE, vea Esquemas de mensaje para la operación SQLEXECUTE.
Especificar la acción SQLEXECUTE
Debe especificar una acción para el mensaje. En el fragmento de código siguiente se muestra cómo especificar la acción para el mensaje SQLEXECUTE.
Message messageIn = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE", readerIn);
Envío del mensaje SQLEXECUTE
En el fragmento de código siguiente se muestra cómo invocar una operación SQLEXECUTE en una base de datos de Oracle a través de un canal.
// 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 = "SCOTT";
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 tid_seq SEQUENCE
string id = null;
XmlDocument doc = new XmlDocument();
doc.Load(readerOut);
XmlNodeList list = doc.GetElementsByTagName("ColumnValue");
if (list.Count > 0) id = list[0].InnerXml;
Nota
La operación SQLEXECUTE siempre devuelve un conjunto de resultados débilmente tipado.
Consulte también
Desarrollo de aplicaciones de Oracle Database mediante el modelo de canal WCF
Creación de un canal mediante Oracle Database