Freigeben über


Ausführen eines SQLEXECUTE-Vorgangs in Oracle Database mithilfe des WCF-Kanalmodells

In diesem Abschnitt wird gezeigt, wie Sie einen SQLEXECUTE-Vorgang für eine Oracle-Datenbank über einen Kanal ausführen. Sie müssen sowohl eine Nachricht als auch eine Nachrichtenaktion für die SOAP-Nachricht angeben. Weitere Informationen zum SQLEXECUTE-Vorgang finden Sie unter Ausführen des SQLEXECUTE-Vorgangs in Oracle-Datenbank mithilfe des WCF-Dienstmodells.

Die SQLEXECUTE-Nachricht

Der folgende XML-Code zeigt eine SQLEXECUTE-Nachricht, die den nächsten Wert einer Oracle SEQUENCE zurückgibt.

<?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>  

Die SQLEXECUTE kann ein Parameterschemaelement und einen Parameterblock angeben, der mehrere Sätze von Parameterdaten enthält. Die angezeigte Meldung gilt für einen einzelnen Aufruf der angegebenen SQL-Anweisung, sodass die Elemente, die das Parameterschema und den Parameterblock angeben, im Nachrichtentext weggelassen werden. Informationen zum Nachrichtenschema für den SQLEXECUTE-Vorgang finden Sie unter Meldungsschemas für den SQLEXECUTE-Vorgang.

Angeben der SQLEXECUTE-Aktion

Sie müssen eine Aktion für die Nachricht angeben. Der folgende Codeauszug zeigt, wie die Aktion für die SQLEXECUTE-Nachricht angegeben wird.

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

Senden der SQLEXECUTE-Nachricht

Der folgende Codeauszug veranschaulicht, wie ein SQLEXECUTE-Vorgang für eine Oracle-Datenbank über einen Kanal aufgerufen wird.

// 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;  

Hinweis

Der SQLEXECUTE-Vorgang gibt immer ein schwach typisiertes Resultset zurück.

Weitere Informationen

Entwickeln von Oracle Database-Anwendungen mithilfe des WCF-Kanalmodells
Erstellen eines Kanals mithilfe von Oracle Database