다음을 통해 공유


WCF 서비스 모델을 사용하여 SQL에서 약한 형식의 저장 프로시저 호출

어댑터 서비스 참조 플러그 인 추가의 프로시저 노드 아래에 나열된 프로시저를 호출하면 출력은 DataSet 배열 형식입니다. 이 항목에서는 DataSet 배열을 반환하는 SQL Server 저장 프로시저를 호출하는 WCF 클라이언트를 만드는 방법에 대한 지침을 제공합니다.

참고

사용자 정의 형식의 열이 있는 테이블에서 작업을 수행하는 경우 애플리케이션 개발을 시작하기 전에 SQL 어댑터를 사용하여 User-Defined 형식의 테이블 및 뷰에 대한 작업을 참조해야 합니다.

이 항목에 사용된 예제 정보

이 항목의 예제에서는 GET_EMP_DETAILS 저장 프로시저를 사용합니다. 이 저장 프로시저는 직원 ID를 입력 매개 변수로 사용하고 해당 ID를 가진 직원의 해당 열을 모두 반환합니다. GET_EMP_DETAILS 저장 프로시저는 샘플과 함께 제공되는 SQL 스크립트를 실행하여 만듭니다. 샘플에 대한 자세한 내용은 어댑터 샘플을 참조하세요. 이 항목을 기반으로 하는 샘플 Execute_StoredProc SQL 어댑터 샘플도 제공됩니다.

WCF 클라이언트 클래스

SQL 어댑터를 사용하여 프로시저 노드에서 저장 프로시저를 호출하기 위해 생성된 WCF 클라이언트의 이름은 다음 표에 나와 있습니다.

데이터베이스 아티팩트 SQL Server WCF 클라이언트 이름
프로시저( 프로시저 노드 아래) Procedures_[스키마]클라이언트

[스키마]는 프로시저가 속한 스키마입니다. 예를 들면 "dbo"입니다.

저장 프로시저 호출을 위한 메서드 서명

다음 표에서는 저장 프로시저를 호출하기 위해 노출된 메서드에 대한 서명을 보여 줍니다.

작업 메서드 시그니처
프로시저 이름 System.Data.DataSet[] [procedure_name](param1, param2, ...)

[procedure_name]은 프로시저의 이름입니다. 예: GET_EMP_DETAILS

예를 들어 GET_EMP_DETAILS 프로시저를 호출하는 메서드의 서명은 다음 코드 조각에 나와 있습니다.

public partial class Procedures_dboClient : System.ServiceModel.ClientBase<Procedures_dbo>, Procedures_dbo {  
  public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);  
}  

이 코드 조각에서는

  • Procedures_dboClient 는 WCF 클라이언트 클래스의 이름입니다. 이 예제에서는 이 클래스를 사용하여 저장 프로시저를 호출하는 클라이언트를 만듭니다.

  • public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue) 는 저장 프로시저를 호출하기 위해 이 예제에서 호출하는 메서드입니다. 이 저장 프로시저는 직원 ID를 사용하고 DataSet 배열을 반환합니다.

SQL Server 저장 프로시저를 호출하는 WCF 클라이언트 만들기

WCF 클라이언트를 사용하여 SQL Server 작업을 수행하는 데 필요한 제네릭 작업 집합에는 어댑터를 사용한 WCF 서비스 모델 개요에 설명된 작업 집합이 포함됩니다. 이 섹션에서는 데이터 세트 배열인 결과 집합인 저장 프로시저를 호출하는 WCF 클라이언트를 만드는 방법을 구체적으로 설명합니다. 이 항목에서는 예를 들어 GET_EMP_DETAILS 저장 프로시저를 호출합니다. 이 저장 프로시저는 각 샘플과 함께 제공되는 SQL 스크립트를 실행하여 만듭니다.

  1. Visual Studio에서 Visual C# 프로젝트를 만듭니다. 이 항목에서는 콘솔 애플리케이션을 만듭니다.

  2. GET_EMP_DETAILS 저장 프로시저에 대한 WCF 클라이언트 클래스를 생성합니다. 프로시저 노드 아래에서 프로 시저 를 선택해야 합니다. WCF 클라이언트 클래스를 생성하는 방법에 대한 자세한 내용은 SQL Server 아티팩트용 WCF 클라이언트 또는 WCF 서비스 계약 생성을 참조하세요.

    중요

    WCF 클라이언트 클래스를 생성하기 전에 EnableBizTalkCompatibilityMode 바인딩 속성을 false로 설정해야 합니다.

  3. 솔루션 탐색기 및 Microsoft.ServiceModel.Channels에 대한 참조를 Microsoft.Adapters.Sql 추가합니다.

  4. Program.cs 파일을 열고 아래 코드 조각에 설명된 대로 클라이언트를 만듭니다.

    
              Procedures_dboClient client = new Procedures_dboClient("SqlAdapterBinding_Procedures_dbo");  
    
    client.ClientCredentials.UserName.UserName = "<Enter username here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    이 코드 조각 Procedures_dboClient 에서 는 SqlAdapterBindingClient.cs에 정의된 WCF 클라이언트입니다. 이 파일은 어댑터 서비스 참조 추가 플러그 인에서 생성됩니다. SqlAdapterBinding_Procedures_dbo 는 클라이언트 엔드포인트 구성의 이름이며 app.config 정의됩니다. 이 파일은 어댑터 서비스 참조 플러그 인 추가에서 생성되며 바인딩 속성 및 기타 구성 설정을 포함합니다.

    참고

    이 코드 조각에서는 구성 파일의 바인딩 및 엔드포인트 주소를 사용합니다. 코드에서 이러한 값을 명시적으로 지정할 수도 있습니다. 클라이언트 바인딩을 지정하는 다양한 방법에 대한 자세한 내용은 SQL 어댑터에 대한 클라이언트 바인딩 구성을 참조하세요.

  5. 아래 코드 조각에 설명된 대로 클라이언트를 엽니다.

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. GET_EMP_DETAILS 저장 프로시저를 호출합니다. GET_EMP_DETAILS 프로시저를 호출하기 전에 코드에 네임스페이 System.Data 스를 추가해야 합니다.

    DataSet[] dataArray;  
    int returnCode;  
    
    try  
    {  
       Console.WriteLine("Calling a stored procedure...");  
       dataArray = client.GET_EMP_DETAILS(10001, out returnCode);  //Invoke the stored procedure  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    Console.WriteLine("The details for the employee with ID '10001' are:");  
    Console.WriteLine("*************************************************");  
    
    foreach (DataSet dataSet in dataArray)  
    {  
       foreach (DataTable tab in dataArray[0].Tables)  
       {  
          foreach (DataRow row in tab.Rows)  
          {  
             for (int i = 0; i < tab.Columns.Count; i++)  
             {  
                Console.WriteLine(row[i]);  
             }  
          }  
       }  
    }  
    Console.WriteLine("*************************************************");  
    
    
  7. 아래 코드 조각에 설명된 대로 클라이언트를 닫습니다.

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. 프로젝트를 빌드한 다음 실행합니다. 사용자가 홍보할 직원의 세부 정보

  9. ID를 ovided하면 콘솔에 표시됩니다.

참고 항목

WCF 서비스 모델을 사용하여 애플리케이션 개발