共用方式為


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

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

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

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

  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 服務模型開發應用程式