WCF サービス モデルを使用して.NET アプリケーションで SQL アダプターを使用して、SQL Server でスカラー関数を呼び出すことができます。 アダプターは、SQL Server で直接呼び出すことができるメソッドとしてスカラー関数を公開します。 アダプターがスカラー関数をサポートする方法の詳細については、「SQL アダプターを 使用した SQL Server でのスカラー関数の実行」を参照してください。
このトピックでは、WCF サービス モデルを使用したスカラー関数の呼び出しについて説明します
このトピックでは、SQL Server データベースでGET_EMP_ID関数を呼び出す方法について説明します。 GET_EMP_ID関数は、 Employee テーブルで従業員の指定を受け取り、対応する従業員 ID を返します。 GET_EMP_ID関数と Employee テーブルは、サンプルで提供される SQL スクリプトを実行して作成されます。 詳細については、「 アダプターのサンプル」を参照してください。
このトピックで使用する例について
このトピックの例では、Employee テーブルで GET_EMP_ID スカラー関数を呼び出しました。 GET_EMP_ID関数と Employee テーブルは、サンプルで提供される SQL スクリプトを実行して作成されます。 このトピックに基づく サンプル ScalarFunction_ServiceModelも、SQL アダプターのサンプルと共に提供されています。 詳細については、「 アダプターのサンプル」を参照してください。
WCF クライアント クラス
SQL アダプターを使用して SQL Server でスカラー関数を呼び出すための WCF クライアントの名前を次の表に示します。
SQL Server データベース アーティファクト | WCF クライアント名 |
---|---|
スカラー関数 | ScalarFunctions_[SCHEMA]Client |
[SCHEMA] = SQL Server アーティファクトのコレクション。たとえば、dbo です。
スカラー関数を呼び出すためのメソッド シグネチャ
次の表は、テーブルに対する基本的な操作のメソッド シグネチャを示しています。 シグネチャはビューに対して同じですが、ビューの名前空間と名前がテーブルの名前に置き換えられる点が異なります。
オペレーション | メソッド シグネチャ |
---|---|
スカラー関数名 | public <return_type><scalar_function_name>(param1, param2, ...) |
< retrun_type> = 関数定義で定義された戻り値の型
< scalar_function_name> = スカラー関数の名前。
例として、次のコードは、dbo スキーマ内の GET_EMP_ID スカラー関数用に生成された WCF クライアント クラスのメソッド シグネチャを示しています。これは、従業員の指定をパラメーターとして受け取り、従業員 ID (整数) を返します。
public partial class ScalarFunctions_dboClient : System.ServiceModel.ClientBase<ScalarFunctions_dbo>, ScalarFunctions_dbo {
public System.Nullable<int> GET_EMP_ID(string emp_desig);
}
このスニペットでは、 ScalarFunctions_dboClient は、アダプター サービス参照の追加プラグインによって生成されたSqlAdapterBindingClient.csの WCF クラスの名前です。
スカラー関数を呼び出すためのパラメーター
スカラー関数を呼び出すために SQL アダプターによって公開されるメソッドのパラメーターは、SQL Server のスカラー関数定義で定義されているパラメーターと同じです。 たとえば、GET_EMP_IDスカラー関数を呼び出すためのパラメーターはemp_desigされ、従業員の指定を受け取ります。
ここでも、スカラー関数の戻り値は、SQL Server のスカラー関数定義で定義されている戻り値と同じです。 たとえば、GET_EMP_ID関数の戻り値は、整数型の従業員の ID です。
スカラー関数を呼び出す WCF クライアントの作成
WCF クライアントを使用して SQL Server で操作を実行するために必要な一連の一般的なアクションには、「SQL アダプターを使用した WCF サービス モデルの概要」で説明されている一連のタスクが含まれます。 このセクションでは、 GET_EMP_ID スカラー関数を呼び出す WCF クライアントを作成する方法について説明します。
WCF クライアントを作成するには
Visual Studio で Visual C# プロジェクトを作成します。 このトピックでは、コンソール アプリケーションを作成します。
GET_EMP_ID スカラー関数の WCF クライアント クラスを生成します。 WCF クライアント クラスの生成の詳細については、「 SQL Server 成果物の WCF クライアントまたは WCF サービス コントラクトを生成する」を参照してください。
ソリューション エクスプローラーで、
Microsoft.Adapters.Sql
とMicrosoft.ServiceModel.Channels
への参照を追加します。Program.csを開き、次のスニペットで説明するようにクライアントを作成します。
ScalarFunctions_dboClient client = new ScalarFunctions_dboClient("SqlAdapterBinding_ScalarFunctions_dbo"); client.ClientCredentials.UserName.UserName = "<Enter user name here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
このスニペットでは、
ScalarFunctions_dboClient
はSqlAdapterBindingClient.csで定義されている WCF クライアントです。 このファイルは、アダプター サービス参照の追加プラグインによって生成されます。SqlAdapterBinding_ScalarFunctions_dbo
はクライアント エンドポイント構成の名前であり、app.configで定義されます。このファイルは、アダプター サービス参照プラグインの追加によっても生成され、バインドプロパティとその他の構成設定が含まれています。注
このスニペットでは、構成ファイルのバインドとエンドポイント アドレスを使用します。 コードでこれらの値を明示的に指定することもできます。 クライアント バインドを指定するさまざまな方法の詳細については、「 SQL アダプターのクライアント バインドを構成する」を参照してください。
次のスニペットの説明に従って、クライアントを開きます。
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
GET_EMP_ID関数を呼び出して、"Manager" という指定の従業員の ID を取得します。
Console.WriteLine("Invoking the GET_EMP_ID function"); string emp_designation = "Manager"; try { System.Nullable<int> emp_id = client.GET_EMP_ID(emp_designation); Console.WriteLine("The Employee ID for the employee with 'Manager' designation is:" + emp_id); } catch (Exception e) { Console.WriteLine("Exception: " + e.Message); throw; }
注
わかりやすくするために、 Employee テーブルには "Manager" という指定を持つ従業員が 1 人しかありません。 ターゲット テーブルに同じ指定の従業員が多い場合は、それに応じて関数を定義する必要があります。
次のスニペットで説明されているように、クライアントを閉じます。
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
プロジェクトをビルドし、実行します。 アプリケーションには、従業員の従業員 ID が "Manager" という指定で表示されます。