Partager via


Exécuter une opération SQLEXECUTE dans Oracle Database à l’aide du modèle de canal WCF

Cette section montre comment effectuer une opération SQLEXECUTE sur une base de données Oracle sur un canal. Vous devez spécifier à la fois un message et une action de message sur le message SOAP. Pour plus d’informations sur l’opération SQLEXECUTE, consultez Exécuter l’opération SQLEXECUTE dans Oracle Database à l’aide du modèle de service WCF.

The SQLEXECUTE Message

Le code XML suivant montre un message SQLEXECUTE qui retourne la valeur suivante d’une séquence 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 peut spécifier un élément de schéma de paramètre et un bloc de paramètres qui contient plusieurs jeux de données de paramètre. Le message affiché concerne un appel unique de l’instruction SQL spécifiée, de sorte que les éléments qui spécifient le schéma de paramètre et le bloc de paramètres sont omis du corps du message. Pour plus d’informations sur le schéma de message de l’opération SQLEXECUTE, consultez Schémas de message pour l’opération SQLEXECUTE.

Spécification de l’action SQLEXECUTE

Vous devez spécifier une action pour le message. L’extrait de code suivant montre comment spécifier l’action pour le message SQLEXECUTE.

Message messageIn = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE", readerIn);  

Envoi du message SQLEXECUTE

L’extrait de code suivant montre comment appeler une opération SQLEXECUTE sur une base de données Oracle sur 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;  

Notes

L’opération SQLEXECUTE retourne toujours un jeu de résultats faiblement typé.

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