共用方式為


使用 WCF 服務模型在 SQL Server 中叫用純量函式

您可以使用 WCF 服務模型在 .NET 應用程式中使用 SQL 配接器,在 SQL Server中叫用純量函式。 配接器會將純量函式公開為可直接在SQL Server上叫用的方法。 如需配接器如何支援純量函式的詳細資訊,請參閱使用 SQL 配接器在 SQL Server中執行純量函式。

本主題如何使用 WCF 服務模型示範叫用純量函式

本主題示範如何在SQL Server資料庫中叫用GET_EMP_ID函式。 GET_EMP_ID函式會採用 Employee 資料表中的員工指定,並傳回對應的員工識別碼。 GET_EMP_ID函式和 Employee 資料表是藉由執行範例所提供的 SQL 腳本來建立。 如需詳細資訊,請參閱 配接器範例

關於本主題中使用的範例

本主題中的範例會在 Employee 資料表上叫用GET_EMP_ID純量函式。 GET_EMP_ID函式和 Employee 資料表是藉由執行範例所提供的 SQL 腳本來建立。 根據本主題 的範例ScalarFunction_ServiceModel也會提供 SQL 配接器範例。 如需詳細資訊,請參閱 配接器範例

WCF 用戶端類別

下表列出用來叫用 sql 配接器之SQL Server中叫用純量函式的 WCF 用戶端名稱。

SQL Server資料庫成品 WCF 用戶端名稱
純量函數 ScalarFunctions_[SCHEMA]Client

[SCHEMA] = SQL Server成品的集合;例如 dbo。

叫用純量函式的方法簽章

下表顯示資料表上基本作業的方法簽章。 檢視的簽章相同,不同之處在于檢視命名空間和名稱會取代資料表的簽章。

作業 方法簽章
純量函式名稱 public < return_type >< scalar_function_name (> param1, param2, ...)

<> retrun_type= 函式定義中定義的傳回型別

<> scalar_function_name= 純量函式的名稱。

例如,下列程式碼顯示 dbo 架構中針對 GET_EMP_ID 純量函式產生的 WCF 用戶端類別的方法簽章,它會將員工指定為參數,並傳回員工識別碼 (整數) 。

public partial class ScalarFunctions_dboClient : System.ServiceModel.ClientBase<ScalarFunctions_dbo>, ScalarFunctions_dbo {      
    public System.Nullable<int> GET_EMP_ID(string emp_desig);  
}  

在此程式碼片段中, ScalarFunctions_dboClient 是新增配接器服務參考外掛程式所產生的 SqlAdapterBindingClient.cs 中 WCF 類別的名稱。

叫用純量函式的參數

SQL 配接器用來叫用純量函式的方法參數,與SQL Server中純量函式定義中所定義的參數相同。 例如,叫用GET_EMP_ID純量函式的參數是emp_desig,並接受員工的指定。

同樣地,純量函式的傳回值與SQL Server中純量函式定義中所定義的傳回值相同。 例如,GET_EMP_ID函式的傳回值是整數類型的員工識別碼。

建立 WCF 用戶端以叫用純量函式

使用 WCF 用戶端在 SQL Server 上執行作業所需的一般動作集牽涉到使用 SQL 配接器之 WCF 服務模型概觀中所述的一組工作。 本節說明如何建立 WCF 用戶端以叫用 GET_EMP_ID 純量函式。

建立 WCF 用戶端

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

  2. 產生 GET_EMP_ID 純量函式的 WCF 用戶端類別。 如需產生 WCF 用戶端類別的詳細資訊,請參閱產生 WCF 用戶端或 WCF 服務合約以進行SQL Server成品

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

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

    
              ScalarFunctions_dboClient client = new ScalarFunctions_dboClient("SqlAdapterBinding_ScalarFunctions_dbo");  
    client.ClientCredentials.UserName.UserName = "<Enter user name here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    在此程式碼片段中, ScalarFunctions_dboClient 是 SqlAdapterBindingClient.cs 中定義的 WCF 用戶端。 這個檔案是由新增配接器服務參考外掛程式所產生。 SqlAdapterBinding_ScalarFunctions_dbo 是用戶端端點組態的名稱,且定義于 app.config 中。此檔案也會由 [新增配接器服務參考外掛程式] 產生,並包含系結屬性和其他組態設定。

    注意

    在此程式碼片段中,您會使用組態檔中的系結和端點位址。 您也可以在程式碼中明確指定這些值。 如需指定用戶端系結之不同方式的詳細資訊,請參閱 設定 SQL 配接器的用戶端系結

  5. 開啟用戶端,如下列程式碼片段所述:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. 叫用 GET_EMP_ID 函式,以擷取指定為 「經理」的員工識別碼。

    Console.WriteLine("Invoking the GET_EMP_ID function");  
    string emp_designation = "Manager";  
    try  
    {  
          System.Nullable<int> emp_id = client.GET_EMP_ID(emp_designation);  
          Console.WriteLine("The Employee ID for the employee with 'Manager' designation is:" + emp_id);  
    }  
    catch (Exception e)  
    {  
          Console.WriteLine("Exception: " + e.Message);  
          throw;  
    }  
    

    注意

    為了簡單起見, Employee 資料表只有一位具有「經理」指定的員工。 如果您的目標資料表有更多具有相同指定的員工,您必須據以定義函式。

  7. 關閉用戶端,如下列程式碼片段所述:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. 建置專案,然後加以執行。 應用程式會以 「經理」的指定來顯示員工的員工識別碼。

另請參閱

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