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