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