次の方法で共有


WCF サービス モデルを使用した SQL での ExecuteReader、ExecuteScalar、または ExecuteNonQuery 操作

SQL アダプターは、ExecuteNonQuery、ExecuteReaderExecuteScalar などの汎用SQL Server操作を公開します。 これらの操作を使用して、SQL Server データベースに対して任意の SQL ステートメントを実行できます。 これらの操作は、SQL ステートメントに対して取得する応答の種類によって異なります。 アダプターがこれらの操作をサポートする方法の詳細については、「 ExecuteNonQuery、ExecuteReader、ExecuteScalar 操作のサポート」を参照してください。

このトピックでは、WCF サービス モデルを使用して SQL アダプターを使用して ExecuteReader 操作を実行する方法について説明します。 このトピックで説明する手順と同じセットに従って、 ExecuteNonQuery および ExecuteScalar 操作を 実行できます。

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

このトピックの例では、 ExecuteReader 操作を使用して、ADD_EMP_DETAILS ストアド プロシージャを実行します。 このストアド プロシージャは、Employee テーブルにレコードを追加し、レコードの従業員 ID を返します。 ADD_EMP_DETAILS ストアド プロシージャは、サンプルに付属の SQL スクリプトを実行して作成されます。 サンプルの詳細については、「アダプターの サンプル」を参照してください。 このトピックに基づく サンプル Execute_Readerは、SQL アダプターのサンプルでも提供されています。

WCF クライアント クラス

SQL アダプターを使用して汎用操作 (ExecuteNonQuery、ExecuteReader、または ExecuteScalar) を呼び出すように生成される WCF クライアントの名前を次の表に示します。

Operations WCF クライアント名
ExecuteNonQuery、ExecuteReader、または ExecuteScalar GenericTableOpClient

ジェネリック操作を呼び出すためのメソッド シグネチャ

次の表は、ジェネリック操作を呼び出すために公開されるメソッドのシグネチャを示しています。

操作 メソッド シグネチャ
ExecuteNonQuery int ExecuteNonQuery(string Query)
ExecuteReader System.Data.DataSet[] ExecuteReader(string Query)
ExecuteScalar string ExecuteScalar(string Query)

一例として、ジェネリック操作メソッドのシグネチャを次のコード スニペットに示します。

public partial class GenericTableOpClient : System.ServiceModel.ClientBase<GenericTableOp>, GenericTableOp {  
  public int ExecuteNonQuery(string Query);  
  public System.Data.DataSet[] ExecuteReader(string Query);  
  public string ExecuteScalar(string Query);  
}  

このスニペットでは、

  • GenericTableOpClient は クラスの名前です。 この例では、このクラスを使用して、汎用操作 ExecuteReader を呼び出すクライアントを作成します。

  • public System.Data.DataSet[] ExecuteReader(string Query) は、ADD_EMP_DETAILS ストアド プロシージャを呼び出すためにこの例で呼び出すメソッドです。

ExecuteReader 操作を呼び出す WCF クライアントの作成

WCF クライアントを使用してSQL Serverに対して操作を実行するために必要な一連の一般的なアクションには、「SQL アダプターを使用した WCF チャネル モデルの概要」で説明されている一連のタスクが含まれます。 このセクションでは、 ExecuteReader 操作を呼び出してADD_EMP_DETAILS ストアド プロシージャを実行する WCF クライアントを作成する方法について具体的に説明します。 このストアド プロシージャは、各サンプルで提供される SQL スクリプトを実行して作成されます。

ExecuteReader 操作を呼び出す WCF クライアントを作成するには

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

  2. ExecuteReader 汎用操作の WCF クライアント クラスを生成します。 この操作は、アダプター サービス参照プラグインの追加を使用してSQL Server データベースに接続するときに、ルート ノードで使用できます。 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 ファイルを開き、次のスニペットで説明するようにクライアントを作成します。

    
            GenericTableOpClient client = new GenericTableOpClient("SqlAdapterBinding_GenericTableOp");  
    client.ClientCredentials.UserName.UserName = "<Enter username here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    このスニペットでは、 GenericTableOpClient は SqlAdapterBindingClient.cs で定義されている WCF クライアントです。 このファイルは、アダプター サービス参照の追加プラグインによって生成されます。 SqlAdapterBinding_GenericTableOp はクライアント エンドポイント構成の名前であり、app.config で定義されています。このファイルは、アダプター サービス参照の追加プラグインによっても生成され、バインド プロパティとその他の構成設定が含まれています。

    Note

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

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

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. ADD_EMP_DETAILS ストアド プロシージャに対して ExecuteReader 操作を呼び出します。 ExecuteReader 操作を呼び出す前に、名前空間を System.Data コードに追加する必要があります。

    string query = "EXEC ADD_EMP_DETAILS 'Tom Smith', 'Manager', 500000";  
    DataSet[] dsArray = client.ExecuteReader(query);  
    
    Console.WriteLine("Invoking the ADD_EMP_DETAILS stored procedure using ExecuteReader");  
    Console.WriteLine("*****************************************************");  
    foreach (DataSet dataSet in dsArray)  
    {  
       foreach (DataTable tab in dsArray[0].Tables)  
       {  
           foreach (DataRow row in tab.Rows)  
           {  
              for (int i = 0; i < tab.Columns.Count; i++)  
              {  
                 Console.WriteLine("The ID for the newly added employee is : " + row[i]);  
              }  
           }  
        }  
    }  
    Console.WriteLine("*****************************************************");  
    
    
  7. 次のスニペットで説明されているように、クライアントを閉じます。

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. プロジェクトをビルドし、実行します。 新しく挿入された従業員の従業員 ID がコンソールに表示されます。