Compartir a través de


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