共用方式為


使用 WCF 服務模型在 SQL 中叫用強型別預存程式

當您在 [新增配接器服務參考外掛程式] 的 [強型別程式 ] 節點下叫用程式時,輸出的格式為強型別結果集。 本主題提供如何建立 WCF 用戶端以在傳回強型別結果集的 SQL Server叫用預存程式的指示。

注意

如果您要對具有使用者定義型別資料行的資料表執行作業,請務必在開始開發應用程式之前,先參考 具有 User-Defined 類型的資料表和檢視上的作業

關於本主題中使用的範例

本主題中的範例會使用GET_EMP_DETAILS預存程式。 此預存程式會採用員工識別碼作為輸入參數,並傳回具有該識別碼之員工的所有對應資料行。 GET_EMP_DETAILS預存程式是藉由執行範例所提供的 SQL 腳本來建立。 如需範例的詳細資訊,請參閱 配接器範例。 根據本主題 的範例Execute_TypedStoredProcedure也會提供 SQL 配接器範例。

WCF 用戶端類別

下表列出使用 SQL 配接器叫用 強型別程式 節點下叫用預存程式的 WCF 用戶端名稱。

SQL Server資料庫成品 WCF 用戶端名稱
強型別程式節點下的程式 () TypedProcedures_[schema]Client

[schema] 是程式所屬的架構;例如 「dbo」。

叫用預存程式的方法簽章

下表顯示公開以叫用預存程式之方法的簽章。

作業 方法簽章
程序名稱 [PROC_NS][procedure_name] (param1, param2, ...)

[PROC_NS] 是程式命名空間;例如,schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS。StoredProcedureResultSet0[]

[procedure_name] 是程式的名稱;例如,GET_EMP_DETAILS

例如,叫用GET_EMP_DETAILS程式的方法簽章會顯示在下列程式碼片段中。

public partial class TypedProcedures_dboClient : System.ServiceModel.ClientBase<TypedProcedures_dbo>, TypedProcedures_dbo{  
public schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[]   
  GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);  
}  

在此程式碼片段中,

  • TypedProcedures_dboClient 是 類別的名稱。 在此範例中,您會使用此類別來建立用戶端來叫用預存程式。

  • public schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue) 是您在此範例中叫用以叫用預存程式的方法。 此預存程式會採用員工識別碼,並傳回強型別的結果集。

建立 WCF 用戶端以在 SQL Server中叫用預存程式

使用 WCF 用戶端在 SQL Server 上執行作業所需的一般動作集牽涉到使用 SQL 配接器之 WCF 服務模型概觀中所述的一組工作。 本節特別描述如何建立會叫用預存程式的 WCF 用戶端,也就是強型別的結果集。 在此主題中,您會叫用預存程式GET_EMP_DETAILS。 此預存程式是藉由執行每個範例所提供的 SQL 腳本來建立。

  1. 在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。

  2. 產生預存程式的 WCF 用戶端類別GET_EMP_DETAILS。 請確定您在 [強型別程式 ] 節點下選取程式。 如需產生 WCF 用戶端類別的詳細資訊,請參閱產生 WCF 用戶端或 WCF 服務合約以進行SQL Server成品

    重要

    產生 WCF 用戶端類別之前,請確定您已將 EnableBizTalkCompatibilityMode 系結屬性設定為 false。

  3. 在方案總管中,新增 和 Microsoft.ServiceModel.ChannelsMicrosoft.Adapters.Sql 參考。

  4. 開啟 Program.cs 檔案並建立用戶端,如下列程式碼片段所述。

    
              TypedProcedures_dboClient client = new TypedProcedures_dboClient("SqlAdapterBinding_TypedProcedures_dbo");  
    client.ClientCredentials.UserName.UserName = "<Enter username here>";  
    client.ClientCredentials.UserName.Password = "<Enter username here>";  
    

    在此程式碼片段中, TypedProcedures_dboClient 是 SqlAdapterBindingClient.cs 中定義的 WCF 用戶端。 這個檔案是由新增配接器服務參考外掛程式所產生。 SqlAdapterBinding_TypedProcedures_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預存程式。

    // Create array of type as specified in the method signature  
    schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[] resultSet =  
       new schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[1];  
    int returnCode;  
    
    try  
    {  
       Console.WriteLine("Calling a stored procedure...");  
       resultSet = 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("*************************************************");  
    
    for (int i = 0; i < resultSet.Length; i++)  
       {  
          Console.WriteLine("Employee Name        : " + resultSet[i].Name);  
          Console.WriteLine("Employee Designation : " + resultSet[i].Designation);  
          Console.WriteLine("Employee Salary      : " + resultSet[i].Salary);  
       }  
    
    Console.WriteLine("*************************************************");  
    
    
  7. 關閉用戶端,如下列程式碼片段所述:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. 建置專案,然後加以執行。 員工識別碼的名稱、指定和薪資會顯示在主控台上。

另請參閱

使用 WCF 服務模型開發應用程式