您可以使用 WCF 服務模型在 .NET 應用程式中使用 SQL 配接器來叫用 SQL Server 中的數據表值函式。 配接器會將數據表值函式公開為可直接在 SQL Server 上叫用的方法。 如需配接器如何支援純量函式的詳細資訊,請參閱使用 SQL 配接器 在 SQL Server 中執行 Table-Valued 函式。
本主題示範如何在 SQL Server 資料庫中叫用TVF_EMPLOYEE函式。 TVF_EMPLOYEE函式會採用Employee資料表中員工的職位,並傳回該員工的記錄。 TVF_EMPLOYEE函式和 Employee 數據表是藉由執行範例所提供的 SQL 腳本來建立。 如需詳細資訊,請參閱 配接器範例。
關於本主題中使用的範例
本主題中的範例在 Employee 數據表上叫用TVF_EMPLOYEE數據表值函式。 TVF_EMPLOYEE函式和 Employee 數據表是藉由執行範例所提供的 SQL 腳本來建立。 根據本主題的範例,TableFunction_ServiceModel,也隨附在 SQL 配接器的範例集中。 如需詳細資訊,請參閱 配接器範例。
WCF 用戶端類別
下表列出在 SQL Server 中使用 SQL 配接器叫用純量函式所產生的 WCF 用戶端名稱。
| SQL Server 資料庫工件 | WCF 用戶端名稱 |
|---|---|
| 資料表值函式 | TableValuedFunctions_[SCHEMA]Client |
[SCHEMA] = SQL Server 專案的集合;例如 dbo。
方法簽章以叫用表值函數
下表顯示在表格上進行基本操作的方法簽名。 檢視表的簽章相同,不同之處在於檢視命名空間和名稱會取代數據表的簽章。
| 行動 | 方法簽章 |
|---|---|
| 數據表值函式名稱 | public [NAMESPACE][FUNCTION_NAME][] [FUNCTION_NAME](param1, param2, ...) |
[NAMESPACE] = 命名空間,例如 schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE
[FUNCTION_NAME] = 數據表值函式的名稱。
例如,下列程式代碼會顯示 dbo 架構中針對 TVF_EMPLOYEE 純量函式產生的 WCF 用戶端類別的方法簽章,其會將員工指定為參數,並傳回員工記錄。
public partial class TableValuedFunctions_dboClient : System.ServiceModel.ClientBase<TableValuedFunctions_dbo>, TableValuedFunctions_dbo {
public schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[] TVF_EMPLOYEE(string emp_desig);
}
在此代碼段中, TableValuedFunctions_dboClient 是新增配接器服務參考外掛程式所產生的SqlAdapterBindingClient.cs WCF 類別的名稱。
調用資料表值函式的參數
SQL 配接器用來叫用數據表值函式之方法的參數,與 SQL Server 中函數定義中所定義的參數相同。 例如,叫用TVF_EMPLOYEE數據表值函式的參數是emp_desig並採用員工的指定。
同樣地,數據表值函式的傳回值與 SQL Server 函數定義中所定義的傳回值相同。 例如,TVF_EMPLOYEE 函式的傳回值是 schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[] 類型的記錄陣列。
建立 WCF 用戶端以叫用數據表值函式
使用 WCF 用戶端在 SQL Server 上執行作業所需的一組泛型動作,牽涉到 使用 SQL 配接器之 WCF 服務模型概觀中所述的一組工作。 本節說明如何建立 WCF 用戶端來叫用數據表值函 式TVF_EMPLOYEE 。
在 Visual Studio 中建立 Visual C# 專案。 針對本主題,建立主控台應用程式。
產生用於TVF_EMPLOYEE純量函數的WCF用戶端類別。 如需產生 WCF 用戶端類別的詳細資訊,請參閱 產生 WCF 用戶端或 SQL Server 成品的 WCF 服務合約。
在 [方案總管] 中,新增對
Microsoft.Adapters.Sql和Microsoft.ServiceModel.Channels的參考。開啟Program.cs並建立用戶端,如下列代碼段所述。
TableValuedFunctions_dboClient client = new TableValuedFunctions_dboClient("SqlAdapterBinding_TableValuedFunctions_dbo"); client.ClientCredentials.UserName.UserName = "<Enter user name here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";在此代碼段中,
TableValuedFunctions_dboClient是定義於 SqlAdapterBindingClient.cs 中的 WCF 用戶端。 此檔案是由新增配接器服務參考外掛程式所產生。SqlAdapterBinding_TableValuedFunctions_dbo是用戶端端點組態的名稱,且定義於 app.config中。此檔案也會由新增配接器服務參考外掛程式產生,並包含系結屬性和其他組態設定。備註
在此代碼段中,您會使用組態檔中的系結和端點位址。 您也可以在程式代碼中明確指定這些值。 如需指定客戶端系結之不同方式的詳細資訊,請參閱 設定 SQL 配接器的用戶端系結。
開啟用戶端,如下列代碼段所述:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }叫用 TVF_EMPLOYEE 函式,以擷取所有具有「經理」指定的員工記錄。
Console.WriteLine("Invoking the TVF_EMPLOYEE function"); schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[] emp_details; string emp_designation = "Manager"; try { emp_details = client.TVF_EMPLOYEE(emp_designation); } catch (Exception e) { Console.WriteLine("Exception: " + e.Message); throw; } Console.WriteLine("The details for the employee with the 'Manager' designation are:"); Console.WriteLine("*******************************************************************"); for (int i = 0; i < emp_details.Length; i++) { Console.WriteLine("Employee ID : " + emp_details[i].Employee_ID); Console.WriteLine("Employee Name : " + emp_details[i].Name); Console.WriteLine("Employee Desigation: " + emp_details[i].Designation); Console.WriteLine("Employee Salary : " + emp_details[i].Salary); Console.WriteLine(); }請關閉用戶端程式,如下列程式碼片段所述:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();建置專案,然後執行它。 應用程式會顯示所有具有「經理」職稱的員工的員工編號、姓名和薪資。