Freigeben über


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