次の方法で共有


WCF サービス モデルを使用して SQL で弱く型指定されたストアド プロシージャを呼び出す

アダプター サービス参照の追加プラグインの [ プロシージャ ] ノードの下に一覧表示されているプロシージャを呼び出すと、出力は DataSet 配列の形式になります。 このトピックでは、DataSet 配列を返すSQL Serverでストアド プロシージャを呼び出す WCF クライアントを作成する方法について説明します。

Note

ユーザー定義型の列を持つテーブルに対して操作を実行する場合は、アプリケーションの開発を開始する前 に、「SQL アダプターを使用して User-Defined 型を持つテーブルとビュー に対する操作」を参照してください。

このトピックで使用する例について

このトピックの例では、GET_EMP_DETAILS ストアド プロシージャを使用します。 このストアド プロシージャは、入力パラメーターとして従業員 ID を受け取り、その ID を持つ従業員に対応するすべての列を返します。 GET_EMP_DETAILS ストアド プロシージャは、サンプルに付属の SQL スクリプトを実行して作成されます。 サンプルの詳細については、「アダプターの サンプル」を参照してください。 このトピックに基づく サンプル Execute_StoredProcは、SQL アダプターのサンプルでも提供されています。

WCF クライアント クラス

SQL アダプターを使用して Procedures ノードのストアド プロシージャを呼び出す目的で生成される WCF クライアントの名前を次の表に示します。

SQL Server データベース成果物 WCF クライアント名
プロシージャ ([ プロシージャ ] ノードの下) Procedures_[schema]Client

[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 スクリプトを実行して作成されます。

  1. Visual Studio で Visual C# プロジェクトを作成します。 このトピックでは、コンソール アプリケーションを作成します。

  2. GET_EMP_DETAILS ストアド プロシージャの WCF クライアント クラスを生成します。 [ プロシージャ ] ノードでプロシージャを選択してください。 WCF クライアント クラスの生成の詳細については、「 Generate a WCF Client or WCF Service Contract for SQL Server Artifacts」を参照してください。

    重要

    WCF クライアント クラスを生成する前に、 EnableBizTalkCompatibilityMode バインド プロパティを false に設定してください。

  3. ソリューション エクスプローラーで、 と Microsoft.ServiceModel.Channelsへの参照をMicrosoft.Adapters.Sql追加します。

  4. 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 で定義されています。このファイルは、アダプター サービス参照の追加プラグインによっても生成され、バインド プロパティとその他の構成設定が含まれています。

    Note

    このスニペットでは、構成ファイルのバインドとエンドポイント アドレスを使用します。 これらの値をコードで明示的に指定することもできます。 クライアント バインドを指定するさまざまな方法の詳細については、「 SQL アダプターのクライアント バインドを構成する」を参照してください。

  5. 次のスニペットで説明されているように、クライアントを開きます。

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. 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("*************************************************");  
    
    
  7. 次のスニペットで説明されているように、クライアントを閉じます。

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. プロジェクトをビルドし、実行します。 従業員の詳細を確認します。

  9. がコンソールに表示されます。

参照

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