您可以使用 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 腳本來建立。 SQL 配接器範例中也提供了一個名為 ScalarFunction_ServiceModel 的範例,這是與本主題相關的範例。 如需詳細資訊,請參閱 配接器範例。
WCF 用戶端類別
下表列出在 SQL Server 中使用 SQL 配接器叫用純量函式所產生的 WCF 用戶端名稱。
| SQL Server 資料庫工件 | WCF 用戶端名稱 |
|---|---|
| 純量函式 | ScalarFunctions_[SCHEMA]用戶端 |
[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 用戶端
在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。
產生 WCF 用戶端類別以用於 GET_EMP_ID 純量函數。 如需產生 WCF 用戶端類別的詳細資訊,請參閱 產生 WCF 用戶端或 SQL Server 成品的 WCF 服務合約。
在 [方案總管] 中,新增對
Microsoft.Adapters.Sql和Microsoft.ServiceModel.Channels的參考。開啟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 配接器的用戶端系結。
開啟用戶端,如下列代碼段所述:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }叫用 GET_EMP_ID函式 ,以擷取指定為 “Manager” 的員工標識符。
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 表格只有一位員工被指定為「經理」職稱。 如果您的目標數據表中有多名員工具有相同職稱,您必須據此定義函式。
請關閉用戶端程式,如下列程式碼片段所述:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();建置專案,然後執行它。 應用程式會顯示職稱為「經理」的員工編號。