次の方法で共有


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 クライアント名
テーブル値関数 テーブル値関数_[SCHEMA]クライアント

[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] = テーブル値関数の名前。

例として、次のコードは、 TVF_EMPLOYEE スカラー関数用に生成された WCF クライアント クラスのメソッド シグネチャを dbo スキーマで示しています。これは、従業員の指定をパラメーターとして受け取り、従業員レコードを返します。

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 クライアント クラスの生成の詳細については、「 SQL Server 成果物の WCF クライアントまたは 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関数を呼び出して、"Manager" 指定を持つすべての従業員レコードを取得します。

    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. プロジェクトをビルドし、実行します。 アプリケーションには、"マネージャー" 指定を持つすべての従業員の従業員 ID、名前、給与が表示されます。

こちらもご覧ください

WCF サービス モデルを使用してアプリケーションを開発する