Condividi tramite


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