次の方法で共有


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

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

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

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

DbUpdate

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

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

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

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

実行するクエリは 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 コマンド。
パラメーター SQL クエリのパラメーターのコレクション。
AffectedRecords 最後の操作の影響を受けたレコードの数。

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

DbQueryScalar

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

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

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

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

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

DbQueryScalar の実行が完了すると、スカラーが Result out 引数 (型は、基本クラス AsyncCodeActivity<TResult> で定義されている 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 も設定する必要があります。
CommandType 実行する DbCommand の種類。
ConfigName 接続情報が格納されている構成ファイル セクションの名前。 この引数を設定する場合は、ProviderNameConnectionString は必要ありません。
Sql 実行する SQL コマンド。
パラメーター SQL クエリのパラメーターのコレクション。
結果 クエリの実行後に取得されたスカラー。 この引数は TResult 型です。

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

DbQuery

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

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

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

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

SQL クエリの結果は、DbDataReader を使用して取得されます。 DbDataReader が反復処理されて、DbDataReader の行が TResult のインスタンスにマップされます。 DbQuery のユーザーは、マッピング コードを指定する必要があります。これには、Func<TResult><DbDataReader, TResult> を使用する方法と ActivityFunc<TResult><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 も設定する必要があります。
CommandType 実行する DbCommand の種類。
ConfigName 接続情報が格納されている構成ファイル セクションの名前。 この引数を設定する場合は、ProviderNameConnectionString は必要ありません。
Sql 実行する SQL コマンド。
パラメーター SQL クエリのパラメーターのコレクション。
Mapper クエリの実行結果として取得された DataReader 内のレコードを受け取り、Result コレクションに追加される TResult 型のオブジェクトのインスタンスを返すマッピング関数 (Func<TResult><DbDataReader, TResult>)。

この場合、マッピングは 1 つのパルスで実行されますが、デザイナーを使用して宣言で作成することはできません。
MapperFunc クエリの実行結果として取得された DataReader 内のレコードを受け取り、Result コレクションに追加される TResult 型のオブジェクトのインスタンスを返すマッピング関数 (ActivityFunc<TResult><DbDataReader, TResult>)。

この場合、マッピングは複数のパルスで実行されます。 この関数は、XAML へのシリアル化や宣言による作成が可能です (既存のアクティビティをマッピングに参加させることができます)。
結果 クエリを実行し、DataReader の各レコードに対してマッピング関数を実行した結果として取得されたオブジェクトのリスト。

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

DbQueryDataSet

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

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

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

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

DbQueryDataSet の実行が完了すると、DataSetResult out 引数 (型は、基本クラス AsyncCodeActivity<TResult> で定義されている 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 コマンド。
パラメーター SQL クエリのパラメーターのコレクション。
結果 クエリの実行後に取得された DataSet

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

接続情報の構成

すべての 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"
    };
    

重要

Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 Azure SQL に接続する場合は、Azure リソースの管理 ID が推奨される認証方法です。

このサンプルの実行

セットアップ手順

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

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

  • DbActivitiesSample という名前のデータベースを作成します。
  • Roles テーブルを作成します。
  • Employees テーブルを作成します。
  • 3 個のレコードを Roles テーブルに挿入します。
  • 12 個のレコードを Employees テーブルに挿入します。

Setup.cmd を実行するには

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

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

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

    注意

    Setup.cmd は、ローカル コンピューターの SqlExpress インスタンスにサンプルをインストールしようとします。 他の SQL Server インスタンスにインストールする場合は、その新しいインスタンス名を使用して Setup.cmd を編集します。

サンプルを実行するには

  1. Visual Studio でソリューションを開きます。
  2. Ctrl + Shift + B キーを押して、ソリューションをコンパイルします。
  3. デバッグなしでサンプルを実行するには、Ctrl + F5 キーを押します。

サンプル データベースをアンインストールするには、コマンド プロンプトのサンプル フォルダーで Cleanup.cmd を実行します。

重要

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

<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