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]クライアント |
[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 クライアント クラスの生成の詳細については、「SQL Server Artifacts の WCF クライアントまたは WCF サービス コントラクトを生成する」を参照してください。
ソリューション エクスプローラーで、 と
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 で定義されます。このファイルは、アダプター サービス参照プラグインの追加によっても生成され、バインド プロパティとその他の構成設定が含まれています。Note
このスニペットでは、構成ファイルのバインドとエンドポイント アドレスを使用します。 これらの値をコードで明示的に指定することもできます。 クライアント バインドを指定するさまざまな方法の詳細については、「 SQL アダプターのクライアント バインドを構成する」を参照してください。
次のスニペットで説明されているように、クライアントを開きます。
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
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(); }
次のスニペットで説明されているように、クライアントを閉じます。
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
プロジェクトをビルドし、実行します。 アプリケーションには、"マネージャー" 指定を持つすべての従業員の従業員 ID、名前、給与が表示されます。