アダプター サービス参照プラグインの [ プロシージャ ] ノードの下にリストされているプロシージャを呼び出すと、出力は DataSet 配列の形式になります。 このトピックでは、DATASet 配列を返すストアド プロシージャを SQL Server で呼び出す WCF クライアントを作成する方法について説明します。
注
アプリケーションの開発を開始する前に、ユーザー定義型の列を持つテーブルに対して操作を実行する場合は、SQL アダプターを使用した User-Defined 型を持つテーブルおよびビューに対する操作を参照することを確認してください。
このトピックで使用する例について
このトピックの例では、GET_EMP_DETAILS ストアド プロシージャを使用します。 このストアド プロシージャは、入力パラメーターとして従業員 ID を受け取り、その ID を持つ従業員に対応するすべての列を返します。 GET_EMP_DETAILS ストアド プロシージャは、サンプルで提供される SQL スクリプトを実行して作成されます。 サンプルの詳細については、「アダプターの サンプル」を参照してください。 このトピックに基づく サンプル Execute_StoredProcも、SQL アダプターのサンプルと共に提供されています。
WCF クライアント クラス
SQL アダプターを使用して [ プロシージャ ] ノードのストアド プロシージャを呼び出すための WCF クライアントの名前を次の表に示します。
| SQL Server データベース アーティファクト | WCF クライアント名 |
|---|---|
| プロシージャ ( Procedures ノードの下) | Procedures_[スキーマ]クライアント |
[schema] はプロシージャが属するスキーマです。例: "dbo"。
ストアド プロシージャを呼び出すためのメソッド シグネチャ
次の表は、ストアド プロシージャを呼び出すために公開されるメソッドのシグネチャを示しています。
| オペレーション | メソッド シグネチャ |
|---|---|
| プロシージャ名 | System.Data.DataSet[] [procedure_name](param1, param2, ...) |
[procedure_name] はプロシージャの名前です。たとえば、GET_EMP_DETAILS
例として、GET_EMP_DETAILS プロシージャを呼び出すメソッドのシグネチャを次のコード スニペットに示します。
public partial class Procedures_dboClient : System.ServiceModel.ClientBase<Procedures_dbo>, Procedures_dbo {
public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);
}
このスニペットでは、
Procedures_dboClientは WCF クライアント クラスの名前です。 この例では、このクラスを使用して、ストアド プロシージャを呼び出すクライアントを作成します。public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue)は、この例でストアド プロシージャを呼び出すために呼び出すメソッドです。 このストアド プロシージャは従業員 ID を受け取り、DataSet 配列を返します。
SQL Server でストアド プロシージャを呼び出す WCF クライアントを作成する
WCF クライアントを使用して SQL Server で操作を実行するために必要な一連の一般的なアクションには、「アダプターを使用した WCF サービス モデルの概要」で説明されている一連のタスクが含まれます。 このセクションでは、ストアド プロシージャ (DataSet 配列である結果セット) を呼び出す WCF クライアントを作成する方法について具体的に説明します。 このトピックでは、例として、GET_EMP_DETAILS ストアド プロシージャを呼び出します。 このストアド プロシージャは、各サンプルで提供される SQL スクリプトを実行することによって作成されます。
Visual Studio で Visual C# プロジェクトを作成します。 このトピックでは、コンソール アプリケーションを作成します。
GET_EMP_DETAILS ストアド プロシージャの WCF クライアント クラスを生成します。 [ プロシージャ ] ノードでプロシージャを選択してください。 WCF クライアント クラスの生成の詳細については、「 SQL Server 成果物の WCF クライアントまたは WCF サービス コントラクトを生成する」を参照してください。
Von Bedeutung
WCF クライアント クラスを生成する前に、 EnableBizTalkCompatibilityMode バインディング プロパティを false に設定してください。
ソリューション エクスプローラーで、
Microsoft.Adapters.SqlとMicrosoft.ServiceModel.Channelsへの参照を追加します。Program.cs ファイルを開き、次のスニペットで説明するようにクライアントを作成します。
Procedures_dboClient client = new Procedures_dboClient("SqlAdapterBinding_Procedures_dbo"); client.ClientCredentials.UserName.UserName = "<Enter username here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";このスニペットでは、
Procedures_dboClientはSqlAdapterBindingClient.csで定義されている WCF クライアントです。 このファイルは、アダプター サービス参照の追加プラグインによって生成されます。SqlAdapterBinding_Procedures_dboはクライアント エンドポイント構成の名前であり、app.configで定義されます。このファイルは、アダプター サービス参照プラグインの追加によっても生成され、バインドプロパティとその他の構成設定が含まれています。注
このスニペットでは、構成ファイルのバインドとエンドポイント アドレスを使用します。 コードでこれらの値を明示的に指定することもできます。 クライアント バインドを指定するさまざまな方法の詳細については、「 SQL アダプターのクライアント バインドを構成する」を参照してください。
次のスニペットの説明に従って、クライアントを開きます。
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }GET_EMP_DETAILS ストアド プロシージャを呼び出します。 GET_EMP_DETAILS プロシージャを呼び出す前に、
System.Data名前空間をコードに追加する必要があります。DataSet[] dataArray; int returnCode; try { Console.WriteLine("Calling a stored procedure..."); dataArray = 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("*************************************************"); foreach (DataSet dataSet in dataArray) { foreach (DataTable tab in dataArray[0].Tables) { foreach (DataRow row in tab.Rows) { for (int i = 0; i < tab.Columns.Count; i++) { Console.WriteLine(row[i]); } } } } Console.WriteLine("*************************************************");次のスニペットで説明されているように、クライアントを閉じます。
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();プロジェクトをビルドし、実行します。 提供した従業員の詳細です。
ID が提供されると、コンソールに表示されます。