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