Eseguire un'operazione SQLEXECUTE nel database Oracle usando il modello di canale WCF
Questa sezione illustra come eseguire un'operazione SQLEXECUTE in un database Oracle su un canale. È necessario specificare sia un messaggio che un'azione di messaggio nel messaggio SOAP. Per altre informazioni sull'operazione SQLEXECUTE, vedere Eseguire l'operazione SQLEXECUTE nel database Oracle usando il modello di servizio WCF.
Messaggio SQLEXECUTE
Il codice XML seguente mostra un messaggio SQLEXECUTE che restituisce il valore successivo di una sequenza 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 può specificare un elemento dello schema dei parametri e un blocco di parametri che contiene più set di dati dei parametri. Il messaggio visualizzato è per una singola chiamata dell'istruzione SQL specificata in modo che gli elementi che specificano lo schema dei parametri e il blocco di parametri vengano omessi dal corpo del messaggio. Per informazioni sullo schema dei messaggi per l'operazione SQLEXECUTE, vedere Schemi dei messaggi per l'operazione SQLEXECUTE.
Specifica dell'azione SQLEXECUTE
È necessario specificare un'azione per il messaggio. L'estratto del codice seguente illustra come specificare l'azione per il messaggio SQLEXECUTE.
Message messageIn = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE", readerIn);
Invio del messaggio SQLEXECUTE
L'estratto di codice seguente illustra come richiamare un'operazione SQLEXECUTE in un database Oracle su un canale.
// 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
L'operazione SQLEXECUTE restituisce sempre un set di risultati con tipi deboli.
Vedere anche
Sviluppare applicazioni di Database Oracle usando il modello di canale WCF
Creare un canale con Oracle Database