Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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