WCF サービス モデルを使用して SQL で厳密に型指定されたストアド プロシージャを呼び出す
アダプター サービス参照プラグインの [ 厳密に型指定されたプロシージャ ] ノードの下に一覧表示されているプロシージャを呼び出すと、出力は厳密に型指定された結果セットの形式になります。 このトピックでは、厳密に型指定された結果セットを返すSQL Serverでストアド プロシージャを呼び出す WCF クライアントを作成する方法について説明します。
Note
ユーザー定義型の列を持つテーブルに対して操作を実行する場合は、アプリケーションの開発を開始する前 に、「User-Defined 型を持つテーブルとビューに対する操作」 を参照してください。
このトピックで使用する例について
このトピックの例では、GET_EMP_DETAILS ストアド プロシージャを使用します。 このストアド プロシージャは、入力パラメーターとして従業員 ID を受け取り、その ID を持つ従業員に対応するすべての列を返します。 GET_EMP_DETAILS ストアド プロシージャは、サンプルに付属の SQL スクリプトを実行して作成されます。 サンプルの詳細については、「アダプターの サンプル」を参照してください。 このトピックに基づく サンプル Execute_TypedStoredProcedureは、SQL アダプターのサンプルでも提供されています。
WCF クライアント クラス
SQL アダプターを使用して 厳密に型指定された プロシージャ ノードでストアド プロシージャを呼び出すための WCF クライアントの名前を次の表に示します。
SQL Server データベース成果物 | WCF クライアント名 |
---|---|
プロシージャ ( 厳密に型指定されたプロシージャ ノードの下) | TypedProcedures_[schema]Client |
[schema] は、プロシージャが属するスキーマです。たとえば、"dbo" です。
ストアド プロシージャを呼び出すためのメソッド シグネチャ
次の表は、ストアド プロシージャを呼び出すために公開されるメソッドのシグネチャを示しています。
操作 | メソッド シグネチャ |
---|---|
プロシージャ名 | [PROC_NS][procedure_name](param1、param2、...) |
[PROC_NS] はプロシージャの名前空間です。たとえば、schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS です。StoredProcedureResultSet0[]
[procedure_name] はプロシージャの名前です。たとえば、GET_EMP_DETAILS
たとえば、GET_EMP_DETAILS プロシージャを呼び出すメソッドのシグネチャを次のコード スニペットに示します。
public partial class TypedProcedures_dboClient : System.ServiceModel.ClientBase<TypedProcedures_dbo>, TypedProcedures_dbo{
public schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[]
GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);
}
このスニペットでは、
TypedProcedures_dboClient
は クラスの名前です。 この例では、このクラスを使用して、ストアド プロシージャを呼び出すクライアントを作成します。public schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue)
は、ストアド プロシージャを呼び出すためにこの例で呼び出すメソッドです。 このストアド プロシージャは従業員 ID を受け取り、厳密に型指定された結果セットを返します。
SQL Serverでストアド プロシージャを呼び出す WCF クライアントの作成
WCF クライアントを使用してSQL Serverに対して操作を実行するために必要な一連の一般的なアクションには、「SQL アダプターを使用した WCF サービス モデルの概要」で説明されている一連のタスクが含まれます。 このセクションでは、厳密に型指定された結果セットであるストアド プロシージャを呼び出す WCF クライアントを作成する方法について具体的に説明します。 このトピックでは、例として、GET_EMP_DETAILS ストアド プロシージャを呼び出します。 このストアド プロシージャは、各サンプルで提供される SQL スクリプトを実行して作成されます。
Visual Studio で Visual C# プロジェクトを作成します。 このトピックでは、コンソール アプリケーションを作成します。
GET_EMP_DETAILS ストアド プロシージャの WCF クライアント クラスを生成します。 [ 厳密に型指定されたプロシージャ] ノードでプロシージャを 選択してください。 WCF クライアント クラスの生成の詳細については、「 Generate a WCF Client or WCF Service Contract for SQL Server Artifacts」を参照してください。
重要
WCF クライアント クラスを生成する前に、 EnableBizTalkCompatibilityMode バインド プロパティを false に設定してください。
ソリューション エクスプローラーで、 と
Microsoft.ServiceModel.Channels
への参照をMicrosoft.Adapters.Sql
追加します。Program.cs ファイルを開き、次のスニペットで説明するようにクライアントを作成します。
TypedProcedures_dboClient client = new TypedProcedures_dboClient("SqlAdapterBinding_TypedProcedures_dbo"); client.ClientCredentials.UserName.UserName = "<Enter username here>"; client.ClientCredentials.UserName.Password = "<Enter username here>";
このスニペットでは、
TypedProcedures_dboClient
は SqlAdapterBindingClient.cs で定義されている WCF クライアントです。 このファイルは、アダプター サービス参照の追加プラグインによって生成されます。SqlAdapterBinding_TypedProcedures_dbo
はクライアント エンドポイント構成の名前であり、app.config で定義されています。このファイルは、アダプター サービス参照の追加プラグインによっても生成され、バインド プロパティとその他の構成設定が含まれています。Note
このスニペットでは、構成ファイルのバインドとエンドポイント アドレスを使用します。 これらの値をコードで明示的に指定することもできます。 クライアント バインドを指定するさまざまな方法の詳細については、「 SQL アダプターのクライアント バインドを構成する」を参照してください。
次のスニペットで説明されているように、クライアントを開きます。
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
次のスニペットで説明されているように、GET_EMP_DETAILS ストアド プロシージャを呼び出します。
// Create array of type as specified in the method signature schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[] resultSet = new schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[1]; int returnCode; try { Console.WriteLine("Calling a stored procedure..."); resultSet = client.GET_EMP_DETAILS(10001, out returnCode); //Invoke the stored procedure } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; } Console.WriteLine("The details for the employee with ID '10001' are:"); Console.WriteLine("*************************************************"); for (int i = 0; i < resultSet.Length; i++) { Console.WriteLine("Employee Name : " + resultSet[i].Name); Console.WriteLine("Employee Designation : " + resultSet[i].Designation); Console.WriteLine("Employee Salary : " + resultSet[i].Salary); } Console.WriteLine("*************************************************");
次のスニペットで説明されているように、クライアントを閉じます。
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
プロジェクトをビルドし、実行します。 従業員 ID の名前、指定、給与がコンソールに表示されます。