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 Datensatz mithilfe eines Kanals in eine Oracle-Datenbank einfügen. Sie müssen sowohl einen Nachrichtentext als auch eine Nachrichtenaktion angeben, wenn Sie eine Nachricht senden.
Einfügen der Nachricht
Der folgende XML-Code zeigt einen Nachrichtentext für eine Einfügeoperation in der Abteilung HR auf der Tabelle EMPLOYEES. Der Datensatz besteht aus einem einzelnen Mitarbeiterdatensatz. Weitere Informationen zum Schema einer Einfügenachricht finden Sie unter Nachrichtenschemas für das grundlegende Einfügen, Aktualisieren, Löschen und Auswählen von Vorgängen in Tabellen und Ansichten. Dies ist der Inhalt der im Beispiel verwendeten Employee_Insert.xml Datei.
<!-- New namespace: http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES -->
<Insert xmlns="http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES">
<RECORDSET xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<EMPLOYEESRECORDINSERT>
<EMPLOYEE_ID>0</EMPLOYEE_ID>
<FIRST_NAME>Anton</FIRST_NAME>
<LAST_NAME>Kirilov</LAST_NAME>
<EMAIL></EMAIL>
<PHONE_NUMBER>555-0198</PHONE_NUMBER>
<HIRE_DATE>2007-03-01T00:00:00.0000000</HIRE_DATE>
<JOB_ID>FI_ACCOUNT</JOB_ID>
<SALARY>5000</SALARY>
<COMMISSION_PCT>0.15</COMMISSION_PCT>
<MANAGER_ID>108</MANAGER_ID>
<DEPARTMENT_ID>100</DEPARTMENT_ID>
</EMPLOYEESRECORDINSERT>
</RECORDSET>
</Insert>
Angeben der Nachrichtenaktion
Sie müssen eine Nachrichtenaktion angeben, wenn Sie eine SOAP-Nachricht an den Oracle Database-Adapter senden. Sie können die Nachrichtenaktion angeben, wenn Sie die Nachricht wie im folgenden Beispiel erstellen.
Message messageIn2 = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES/Insert", readerIn2);
Die Meldungsaktion in diesem Beispiel, "/HR/Table/EMPLOYEES/Insert", gibt an, dass ein Einfügevorgang in der HR.EMPLOYEES-Tabelle ausgeführt werden soll.
Senden der Einfüge-Nachricht
In diesem Beispiel wird gezeigt, wie Sie einen Einfügevorgang für eine Oracle-Tabelle über einen Kanal ausführen. Der Code verwendet den SQLEXECUTE-Vorgang, der vom Oracle Database-Adapter verfügbar gemacht wird, um den nächsten Wert einer Oracle SEQUENCE zurückzugeben. Dieser Wert wird dann in das Feld EMPLOYEE_ID im Einfügedatensatz geschrieben. Mit diesem Muster können Sie Zeilen in Datenbanken einfügen, die über einen automatisch generierten Primärschlüsselwert verfügen. Weitere Informationen zum Aufrufen des SQLEXECUTE-Vorgangs über einen Kanal finden Sie unter Ausführen eines SQLEXECUTE-Vorgangs mithilfe des WCF-Kanalmodells.
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Channels;
using Microsoft.ServiceModel.Adapters;
using Microsoft.Adapters.OracleDB;
namespace OracleDMLChannel
{
class Program
{
static void Main(string[] args)
{
// 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 = "HR";
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 Employee ID
string id = null;
XmlDocument doc = new XmlDocument();
doc.Load(readerOut);
XmlNodeList list = doc.GetElementsByTagName("ColumnValue");
if (list.Count > 0) id = list[0].InnerXml;
// Compose Insert XML
XmlDocument insertDoc = new XmlDocument();
insertDoc.Load("Employee_Insert.xml");
// Change Employee ID
XmlNodeList empidList = insertDoc.GetElementsByTagName("EMPLOYEE_ID");
XmlNode empidNode = empidList[0];
empidNode.InnerXml = id;
// Change email
XmlNodeList emailList = insertDoc.GetElementsByTagName("EMAIL");
XmlNode emailNode = emailList[0];
emailNode.InnerXml = "scotty" + id + "@microsoft.com";
// Change date
XmlNodeList dateList = insertDoc.GetElementsByTagName("HIRE_DATE");
XmlNode dateNode = dateList[0];
dateNode.InnerXml = "2007-03-01T00:00:00.0000000";
StringReader strReader = new StringReader(insertDoc.InnerXml);
XmlReader readerIn2 = XmlReader.Create(strReader);
// Send XML
Message messageIn2 = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES/Insert ", readerIn2);
Message messageOut2 = channel.Request(messageIn2);
// Close the messages
messageOut.Close();
messageOut2.Close();
channel.Close();
}
}
}
Siehe auch
Entwickeln von Oracle-Datenbankanwendungen mithilfe des WCF-Kanalmodells
Erstellen eines Kanals mit Oracle Database
Ausführen eines SQLEXECUTE-Vorgangs mithilfe des WCF-Kanalmodells
Aufrufen einer Funktion in Oracle-Datenbank mithilfe des WCF-Kanalmodells