다음을 통해 공유


WCF 채널 모델을 사용하여 Oracle Database에서 삽입 작업 실행

이 섹션에서는 채널을 사용하여 Oracle 데이터베이스에 레코드를 삽입하는 방법을 보여 줍니다. 메시지를 보낼 때 메시지 본문과 메시지 동작을 모두 지정해야 합니다.

메시지 삽입

다음 XML은 HR에 대한 삽입 작업의 메시지 본문을 보여 줍니다. EMPLOYEES 테이블. 레코드 집합은 단일 직원 레코드로 구성됩니다. 삽입 메시지의 스키마에 대한 자세한 내용은 기본 삽입, 업데이트, 삭제 및 테이블 및 뷰에서 작업 선택에 대한 메시지 스키마를 참조하세요. 예제에 사용된 Employee_Insert.xml 파일의 내용입니다.

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

메시지 작업 지정

ORACLE 데이터베이스 어댑터에 SOAP 메시지를 보낼 때 메시지 작업을 지정해야 합니다. 다음 예제와 같이 메시지를 만들 때 메시지 작업을 지정할 수 있습니다.

Message messageIn2 = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES/Insert", readerIn2);  

이 예제의 메시지 작업인 "/HR/Table/EMPLOYEES/Insert"는 HR에 대한 삽입 작업을 지정합니다. EMPLOYEES 테이블을 수행해야 합니다.

메시지 삽입 보내기

이 예제에서는 채널을 통해 Oracle 테이블에서 삽입 작업을 수행하는 방법을 보여 줍니다. 이 코드는 Oracle 데이터베이스 어댑터에 의해 노출되는 SQLEXECUTE 작업을 사용하여 Oracle SEQUENCE의 다음 값을 반환합니다. 그런 다음 이 값은 삽입 레코드의 EMPLOYEE_ID 필드에 기록됩니다. 이 패턴을 사용하면 자동으로 생성된 기본 키 값이 있는 데이터베이스에 행을 삽입할 수 있습니다. 채널을 통해 SQLEXECUTE 작업을 호출하는 방법에 대한 자세한 내용은 WCF 채널 모델을 사용하여 SQLEXECUTE 작업 실행을 참조하세요.

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();  
        }  
    }  
}  

참고 항목

WCF 채널 모델을 사용하여 Oracle Database 애플리케이션 개발
Oracle Database를 사용하여 채널 만들기
WCF 채널 모델을 사용하여 SQLEXECUTE 작업 실행
WCF 채널 모델을 사용하여 Oracle 데이터베이스에서 함수 호출