WCF 채널 모델을 사용하여 SQL의 테이블에서 삽입 작업 실행
SQL 어댑터는 SQL Server 데이터베이스 테이블 및 뷰에서 기본 삽입, 선택, 업데이트 및 삭제 작업 집합을 검색합니다. 이러한 작업을 사용하면 대상 테이블 또는 뷰에서 Where 절로 한정된 간단한 SQL 삽입, 선택, 업데이트 및 삭제 문을 수행할 수 있습니다. 이 항목에서는 WCF 채널 모델을 사용하여 SQL Server 데이터베이스 테이블에서 삽입 작업을 수행하는 방법에 대한 지침을 제공합니다.
어댑터가 이러한 작업을 지원하는 방법에 대한 자세한 내용은 SQL 어댑터를 사용하여 테이블 및 뷰에 대한 삽입, 업데이트, 삭제 및 선택 작업을 참조하세요. WCF 채널 모델을 사용하여 SQL Server 작업을 수행하는 방법에 대한 자세한 내용은 SQL 어댑터를 사용한 WCF 채널 모델 개요를 참조하세요.
이 항목에 사용된 예제 정보
이 항목의 예제에서는 Employee 테이블에서 작업을 수행합니다. Employee 테이블은 샘플과 함께 제공되는 SQL 스크립트를 실행하여 만듭니다. 샘플에 대한 자세한 내용은 SQL 어댑터에 대한 샘플을 참조하세요. 이 항목을 기반으로 하는 샘플 EmployeeInsertOp도 SQL 어댑터 샘플과 함께 제공됩니다.
메시지 삽입
WCF 채널 모델을 사용하여 SQL Server 데이터베이스에서 작업을 수행하려면 작업과 관련된 요청 메시지가 있어야 합니다. SQL Server 데이터베이스의 Employee 테이블에서 삽입 작업을 수행하기 위한 요청 메시지는 다음과 유사합니다.
<Insert xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<Rows>
<Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">
<Name>Tom Smith</Name>
<Designation>Manager</Designation>
<Salary>500000</Salary>
</Employee>
</Rows>
</Insert>
이 요청 메시지는 다음 세부 정보가 포함된 레코드를 삽입합니다.
Name = Tom Smith
Designation = Manager
Salary = 500000
메시지를 파일(예: InsertRequest.xml)에 복사해야 합니다. 이 파일은 이 예제에서 SQL 어댑터를 사용하여 요청 메시지를 SQL Server 보내는 데 사용됩니다. 테이블 작업에 대한 메시지 스키마에 대한 자세한 내용은 테이블 및 뷰에서 삽입, 업데이트, 삭제 및 선택 작업에 대한 메시지 스키마를 참조하세요.
WCF 채널 애플리케이션 만들기
이 섹션에서는 Employee 테이블에서 삽입 작업을 수행하는 WCF 채널 애플리케이션을 만드는 방법에 대한 지침을 제공합니다.
Employee 테이블에 레코드를 삽입하기 위한 WCF 채널 애플리케이션을 만들려면
Visual Studio에서 Visual C# 프로젝트를 만듭니다. 이 항목에서는 콘솔 애플리케이션을 만듭니다.
솔루션 탐색기 , ,
Microsoft.ServiceModel.Channels
System.ServiceModel
및System.Runtime.Serialization
에 대한 참조를Microsoft.Adapters.Sql
추가합니다.Program.cs 파일을 열고 다음 네임스페이스를 추가합니다.
Microsoft.Adapters.Sql
Microsoft.ServiceModel.Channels
System.ServiceModel
System.ServiceModel.Channels
System.Xml
바인딩 및 엔드포인트를 만듭니다.
SqlAdapterBinding binding = new SqlAdapterBinding(); EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");
채널 팩터리를 만들고 엽니다. 이 애플리케이션은 SQL Server 요청 메시지를 보내고 응답을 수신하므로 IRequestChannel 인터페이스를 구현해야 합니다.
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, address); factory.Credentials.UserName.UserName = "<Enter user name here>"; factory.Credentials.UserName.Password = "<Enter password here>"; factory.Open();
채널을 만들고 엽니다.
IRequestChannel channel = factory.CreateChannel(); channel.Open();
요청 메시지를 만들고 보냅니다.
XmlReader readerIn; Console.WriteLine("Creating the message"); try { readerIn = XmlReader.Create("InsertRequest.xml"); Console.WriteLine("Reader created"); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; } Message messageIn = Message.CreateMessage(MessageVersion.Default, "TableOp/Insert/dbo/Employee", readerIn); Message messageOut = channel.Request(messageIn);
요청 메시지를 만드는 동안 어댑터가 SQL Server 테이블에서 수행하는 작업을 나타내는 메시지 동작을 지정해야 합니다. Employee 테이블에서 삽입 작업을 수행하려면 메시지 동작은 입니다
TableOp/Insert/dbo/Employee
. 테이블의 다양한 작업에 대한 메시지 동작을 확인하는 방법에 대한 자세한 내용은 테이블 및 뷰에서 삽입, 업데이트, 삭제 및 선택 작업에 대한 메시지 스키마를 참조하세요.응답 메시지를 가져옵니다.
XmlReader readerOut = messageOut.GetReaderAtBodyContents(); XmlDocument doc = new XmlDocument(); doc.Load(readerOut); doc.Save("C:\\Response.xml");
메시지, 채널 및 채널 팩터리를 닫습니다.
messageOut.Close(); channel.Close(); factory.Close();
프로젝트를 빌드합니다. 프로젝트를 빌드한 후 다음 작업을 수행해야 합니다.
프로젝트 실행 파일과 동일한 위치에 InsertRequest.xml 요청 메시지를 복사합니다. 일반적으로 이 위치는 프로젝트 디렉터리 아래에 있는 \bin\Debug\입니다.
이 예제에 사용된 "Employee" 테이블에는 Point UDT(사용자 정의 형식)의 열이 있습니다. 따라서 프로젝트를 실행하기 전에 User-Defined 형식 만들기에 설명된 대로 Point UDT에 대한 어셈블리를 만들어야 합니다. 또한 프로젝트 실행 파일과 동일한 위치에 어셈블리 DLL을 복사해야 합니다. 일반적으로 이 위치는 프로젝트 디렉터리 아래에 있는 \bin\Debug\입니다.
애플리케이션을 실행합니다. 응답 메시지(Response.xml)는 애플리케이션에서 지정한 위치에 저장됩니다. 응답 메시지는 새로 추가된 직원의 ID를 포함하며 다음과 유사합니다.
<InsertResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <InsertResult> <long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">10006</long> </InsertResult> </InsertResponse>
Employee 테이블에는 Employee_ID 열이 ID 열로 있으므로 삽입 작업은 새로 삽입된 레코드의 ID 열에 대한 값을 반환합니다. 테이블에 ID 열이 없으면 반환 값은 NULL입니다.