共用方式為


使用 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 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

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

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

  3. 在 [方案總管] 中,新增對 Microsoft.Adapters.SqlMicrosoft.ServiceModel.Channels 的參考。

  4. 開啟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 配接器的用戶端系結

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

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. 叫用 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();  
    }  
    
  7. 請關閉用戶端程式,如下列程式碼片段所述:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. 建置專案,然後執行它。 應用程式會顯示所有具有「經理」職稱的員工的員工編號、姓名和薪資。

另請參閱

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