Ausführen eines Einfügevorgangs in Oracle-Datenbank mithilfe des WCF-Kanalmodells
In diesem Abschnitt wird gezeigt, wie Sie einen Datensatz mithilfe eines Kanals in eine Oracle-Datenbank einfügen. Sie müssen beim Senden einer Nachricht sowohl einen Nachrichtentext als auch eine Nachrichtenaktion angeben.
Die Einfügenachricht
Der folgende XML-Code zeigt einen Nachrichtentext für einen Insert-Vorgang in der HR. EMPLOYEES-Tabelle. Der Datensatzsatz besteht aus einem einzelnen Mitarbeiterdatensatz. Weitere Informationen zum Schema einer Einfügenachricht finden Sie unter Nachrichtenschemas für grundlegende Einfüge-, Update-, Lösch- und Auswahlvorgänge für Tabellen und Ansichten. Dies ist der Inhalt der Employee_Insert.xml-Datei, die im Beispiel verwendet wird.
<!-- 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 für die Hr. TABELLE "EMPLOYEES" muss ausgeführt werden
Senden der Einfügenachricht
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 Datensatz Einfügen 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();
}
}
}
Weitere Informationen
Entwickeln von Oracle-Datenbankanwendungen mithilfe des WCF-Kanalmodells
Erstellen eines Kanals mithilfe von Oracle Database
Ausführen eines SQLEXECUTE-Vorgangs mithilfe des WCF-Kanalmodells
Aufrufen einer Funktion in Oracle-Datenbank mithilfe des WCF-Kanalmodells