使用 WCF 服務模型叫用 SQL Server 中的 Table-Valued 函式
您可以使用 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 配接器之SQL Server中叫用純量函式的 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 用戶端或 WCF 服務合約以進行SQL Server成品。
在方案總管中,新增 和
Microsoft.ServiceModel.Channels
的Microsoft.Adapters.Sql
參考。開啟 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();
建置專案,然後加以執行。 應用程式會顯示所有具有「經理」指定之員工的員工識別碼、名稱和薪資。