次の方法で共有


データベース アクセス アクティビティ

このトピックの内容は、Windows Workflow Foundation 4 に該当します。

データベース アクセス アクティビティを使用すると、ワークフロー内でデータベースにアクセスできます。データベースにアクセスして情報を取得または変更したり、ADO.NET を使用してデータベースにアクセスしたりできます。

Ee622977.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、ダウンロード ページに移動して、すべての Windows Communication Foundation (WCF) サンプルおよび WF サンプルをダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

<InstallDrive>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\DbActivities

データベース アクティビティ

以降では、このサンプルに含まれている一連のアクティビティについて説明します。

DbUpdate

データベースを変更する SQL クエリを実行します (挿入、更新、削除、およびその他の変更)。

このクラスは作業を非同期に実行します (AsyncCodeActivity から派生し、その非同期機能を使用します)。

接続情報を構成するには、プロバイダーの不変名 (ProviderName) と接続文字列 (ConnectionString) を設定するか、アプリケーション構成ファイルの接続文字列構成名 (ConfigFileSectionName) を使用します。

実行するクエリは Sql プロパティで構成し、パラメーターは Parameters コレクションを通じて渡します。

DbUpdate の実行が完了すると、影響を受けたレコードの数が AffectedRecords プロパティで返されます。

Public class DbUpdate: AsyncCodeActivity
{
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }

    [DependsOn("Parameters")]
    public OutArgument<int> AffectedRecords { get; set; }     
}

引数

説明

ProviderName

ADO.NET プロバイダーの不変名。この引数を設定する場合は、ConnectionString も設定する必要があります。

ConnectionString

データベースに接続するための接続文字列。この引数を設定する場合は、ProviderName も設定する必要があります。

ConfigName

接続情報が格納されている構成ファイル セクションの名前。この引数を設定する場合は、ProviderNameConnectionString は必要ありません。

CommandType

実行する DbCommand の種類。

Sql

実行する SQL コマンド。

Parameters

SQL クエリのパラメーターのコレクション。

AffectedRecords

最後の操作の影響を受けたレコードの数。

DbQueryScalar

データベースから 1 つの値を取得するクエリを実行します。

このクラスは作業を非同期に実行します (AsyncCodeActivity から派生し、その非同期機能を使用します)。

接続情報を構成するには、プロバイダーの不変名 (ProviderName) と接続文字列 (ConnectionString) を設定するか、アプリケーション構成ファイルの接続文字列構成名 (ConfigFileSectionName) を使用します。

実行するクエリは Sql プロパティで構成し、パラメーターは Parameters コレクションを通じて渡します。

DbQueryScalar の実行が完了すると、スカラーが Result out 引数 (型は、基本クラス AsyncCodeActivity で定義されている TResult) で返されます。

public class DbQueryScalar<TResult> : AsyncCodeActivity<TResult>
{
    // public arguments
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }
}

引数

説明

ProviderName

ADO.NET プロバイダーの不変名。この引数を設定する場合は、ConnectionString も設定する必要があります。

ConnectionString

データベースに接続するための接続文字列。この引数を設定する場合は、ProviderName も設定する必要があります。

ConfigName

接続情報が格納されている構成ファイル セクションの名前。この引数を設定する場合は、ProviderNameConnectionString は必要ありません。

CommandType

実行する DbCommand の種類。

Sql

実行する SQL コマンド。

Parameters

SQL クエリのパラメーターのコレクション。

Result

クエリの実行後に取得されたスカラー。この引数は TResult 型です。

DbQuery

オブジェクトのリストを取得するクエリを実行します。クエリの実行後にマッピング関数が実行されます (Func<DbDataReader, TResult> または ActivityFunc<DbDataReader, TResult>)。このマッピング関数は、DbDataReader 内のレコードを取得して、返されるオブジェクトにマップします。

接続情報を構成するには、プロバイダーの不変名 (ProviderName) と接続文字列 (ConnectionString) を設定するか、アプリケーション構成ファイルの接続文字列構成名 (ConfigFileSectionName) を使用します。

実行するクエリは Sql プロパティで構成し、パラメーターは Parameters コレクションを通じて渡します。

SQL クエリの結果は、DbDataReader を使用して取得されます。DbDataReader が反復処理されて、DbDataReader の行が TResult のインスタンスにマップされます。DbQuery のユーザーは、マッピング コードを指定する必要があります。これには、Func<DbDataReader, TResult> を使用する方法と ActivityFunc<DbDataReader, TResult> を使用する方法の 2 つの方法があります。1 つ目の方法は、マッピングが 1 つのパルスで実行されるので高速ですが、XAML にシリアル化することはできません。2 つ目の方法は、マッピングが複数のパルスで実行されるので時間がかかることがありますが、XAML へのシリアル化や宣言による作成が可能です (既存のアクティビティをマッピングに参加させることができます)。

public class DbQuery<TResult> : AsyncCodeActivity<IList<TResult>> where TResult : class
{
    // public arguments
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }

    [OverloadGroup("DirectMapping")]
    [DefaultValue(null)]
    public Func<DbDataReader, TResult> Mapper { get; set; }

    [OverloadGroup("MultiplePulseMapping")]
    [DefaultValue(null)]
    public ActivityFunc<DbDataReader, TResult> MapperFunc { get; set; }
}

引数

説明

ProviderName

ADO.NET プロバイダーの不変名。この引数を設定する場合は、ConnectionString も設定する必要があります。

ConnectionString

データベースに接続するための接続文字列。この引数を設定する場合は、ProviderName も設定する必要があります。

ConfigName

接続情報が格納されている構成ファイル セクションの名前。この引数を設定する場合は、ProviderNameConnectionString は必要ありません。

CommandType

実行する DbCommand の種類。

Sql

実行する SQL コマンド。

Parameters

SQL クエリのパラメーターのコレクション。

Mapper

クエリの実行結果として取得された DataReader 内のレコードを取得して、Result コレクションに追加される TResult 型のオブジェクトのインスタンスを返すマッピング関数 (Func<DbDataReader, TResult>)。

この場合、マッピングは 1 つのパルスで実行されますが、デザイナーを使用して宣言で作成することはできません。

MapperFunc

クエリの実行結果として取得された DataReader 内のレコードを取得して、Result コレクションに追加される TResult 型のオブジェクトのインスタンスを返すマッピング関数 (ActivityFunc<DbDataReader, TResult>)。

この場合、マッピングは複数のパルスで実行されます。この関数は、XAML へのシリアル化や宣言による作成が可能です (既存のアクティビティをマッピングに参加させることができます)。

Result

クエリを実行し、DataReader の各レコードに対してマッピング関数を実行した結果として取得されたオブジェクトのリスト。

DbQueryDataSet

DataSet を返すクエリを実行します。このクラスは作業を非同期に実行します (AsyncCodeActivity<TResult> から派生し、その非同期機能を使用します)。

接続情報を構成するには、プロバイダーの不変名 (ProviderName) と接続文字列 (ConnectionString) を設定するか、アプリケーション構成ファイルの接続文字列構成名 (ConfigFileSectionName) を使用します。

実行するクエリは Sql プロパティで構成し、パラメーターは Parameters コレクションを通じて渡します。

DbQueryDataSet の実行が完了すると、DataSetResult out 引数 (型は、基本クラス AsyncCodeActivity で定義されている TResult) で返されます。

public class DbQueryDataSet : AsyncCodeActivity<DataSet>
{
    // public arguments
    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DefaultValue(null)]
    public InArgument<string> ProviderName { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConnectionString")]
    [DependsOn("ProviderName")]
    [DefaultValue(null)]
    public InArgument<string> ConnectionString { get; set; }

    [RequiredArgument]
    [OverloadGroup("ConfigFileSectionName")]
    [DefaultValue(null)]
    public InArgument<string> ConfigName { get; set; }

    [DefaultValue(null)]
    public CommandType CommandType { get; set; }

    [RequiredArgument]
    public InArgument<string> Sql { get; set; }

    [DependsOn("Sql")]
    [DefaultValue(null)]
    public IDictionary<string, Argument> Parameters { get; }
}

引数

説明

ProviderName

ADO.NET プロバイダーの不変名。この引数を設定する場合は、ConnectionString も設定する必要があります。

ConnectionString

データベースに接続するための接続文字列。この引数を設定する場合は、ProviderName も設定する必要があります。

ConfigName

接続情報が格納されている構成ファイル セクションの名前。この引数を設定する場合は、ProviderNameConnectionString は必要ありません。

CommandType

実行する DbCommand の種類。

Sql

実行する SQL コマンド。

Parameters

SQL クエリのパラメーターのコレクション。

Result

クエリの実行後に取得された DataSet

接続情報の構成

すべての DbActivities は同じ構成パラメーターを共有します。パラメーターを構成するには次の 2 つの方法があります。

  • ConnectionString + InvariantName: ADO.NET プロバイダーの不変名と接続文字列を設定します。

    Activity dbSelectCount = new DbQueryScalar<DateTime>()
    {
        ProviderName = "System.Data.SqlClient",
        ConnectionString = @"Data Source=.\SQLExpress;
                             Initial Catalog=DbActivitiesSample;
                             Integrated Security=True",
        Sql = "SELECT GetDate()"
    };
    
  • ConfigName: 接続情報を含む構成セクションの名前を設定します。

    <connectionStrings>    
        <add name="DbActivitiesSample"
             providerName="System.Data.SqlClient"
             connectionString="Data Source=.\SQLExpress;Initial Catalog=DbActivitiesSample;Integrated Security=true"/>
      </connectionStrings>
    
  • アクティビティで次のように設定します。

    Activity dbSelectCount = new DbQueryScalar<int>()
    {                
        ConfigName = "DbActivitiesSample",
        Sql = "SELECT COUNT(*) FROM Roles"
    };
    

このサンプルの実行

セットアップ手順

このサンプルはデータベースを使用します。設定と読み込みのためのスクリプト (Setup.cmd) がサンプルに付属しているので、そのファイルを、コマンド プロンプトを使用して実行してください。

Setup.cmd スクリプトは、CreateDb.sql スクリプト ファイルを呼び出します。このスクリプト ファイルには、次の操作を実行する SQL コマンドが含まれています。

  • DbActivitiesSample という名前のデータベースを作成します。

  • Roles テーブルを作成します。

  • Employees テーブルを作成します。

  • 3 個のレコードを Roles テーブルに挿入します。

  • 12 個のレコードを Employees テーブルに挿入します。

Setup.cmd を実行するには

  1. コマンド プロンプトを開きます。

  2. DbActivities サンプル フォルダーに移動します。

  3. 「setup.cmd」と入力し、Enter キーを押します。

    Ee622977.note(ja-jp,VS.100).gif注 :
    Setup.cmd は、ローカル コンピューターの SqlExpress インスタンスにサンプルをインストールしようとします。他の SQL Server インスタンスにインストールする場合は、その新しいインスタンス名を使用して Setup.cmd を編集します。

サンプル データベースをアンインストールするには

  1. コマンド プロンプトで、サンプル フォルダーから Cleanup.cmd を実行します。

サンプルを実行するには

  1. Visual Studio 2010 で、ソリューションを開きます。

  2. F6 キーを押してソリューションをコンパイルします。

  3. Ctrl キーを押しながら F5 キーを押して、サンプルをデバッグなしで実行します。

Ee622977.Important(ja-jp,VS.100).gif 注 :
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。

<InstallDrive>:\WF_WCF_Samples

このディレクトリが存在しない場合は、「.NET Framework 4 向けの Windows Communication Foundation (WCF) および Windows Workflow Foundation (WF) のサンプル」にアクセスして、Windows Communication Foundation (WCF) および WF のサンプルをすべてダウンロードしてください。このサンプルは、次のディレクトリに格納されます。

<InstallDrive>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\DbActivities