このトピックの内容は、Windows Workflow Foundation 4 に該当します。
データベース アクセス アクティビティを使用すると、ワークフロー内でデータベースにアクセスできます。データベースにアクセスして情報を取得または変更したり、ADO.NET を使用してデータベースにアクセスしたりできます。
![]() |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<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 |
データベースに接続するための接続文字列。この引数を設定する場合は、 |
ConfigName |
接続情報が格納されている構成ファイル セクションの名前。この引数を設定する場合は、 |
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 |
データベースに接続するための接続文字列。この引数を設定する場合は、 |
ConfigName |
接続情報が格納されている構成ファイル セクションの名前。この引数を設定する場合は、 |
CommandType |
実行する DbCommand の種類。 |
Sql |
実行する SQL コマンド。 |
Parameters |
SQL クエリのパラメーターのコレクション。 |
Result |
クエリの実行後に取得されたスカラー。この引数は |
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 |
データベースに接続するための接続文字列。この引数を設定する場合は、 |
ConfigName |
接続情報が格納されている構成ファイル セクションの名前。この引数を設定する場合は、 |
CommandType |
実行する DbCommand の種類。 |
Sql |
実行する SQL コマンド。 |
Parameters |
SQL クエリのパラメーターのコレクション。 |
Mapper |
クエリの実行結果として取得された この場合、マッピングは 1 つのパルスで実行されますが、デザイナーを使用して宣言で作成することはできません。 |
MapperFunc |
クエリの実行結果として取得された この場合、マッピングは複数のパルスで実行されます。この関数は、XAML へのシリアル化や宣言による作成が可能です (既存のアクティビティをマッピングに参加させることができます)。 |
Result |
クエリを実行し、 |
DbQueryDataSet
DataSet を返すクエリを実行します。このクラスは作業を非同期に実行します (AsyncCodeActivity<TResult
> から派生し、その非同期機能を使用します)。
接続情報を構成するには、プロバイダーの不変名 (ProviderName
) と接続文字列 (ConnectionString
) を設定するか、アプリケーション構成ファイルの接続文字列構成名 (ConfigFileSectionName
) を使用します。
実行するクエリは Sql
プロパティで構成し、パラメーターは Parameters
コレクションを通じて渡します。
DbQueryDataSet
の実行が完了すると、DataSet
が Result
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 |
データベースに接続するための接続文字列。この引数を設定する場合は、 |
ConfigName |
接続情報が格納されている構成ファイル セクションの名前。この引数を設定する場合は、 |
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 を実行するには
コマンド プロンプトを開きます。
DbActivities サンプル フォルダーに移動します。
「setup.cmd」と入力し、Enter キーを押します。
注 :
Setup.cmd は、ローカル コンピューターの SqlExpress インスタンスにサンプルをインストールしようとします。他の SQL Server インスタンスにインストールする場合は、その新しいインスタンス名を使用して Setup.cmd を編集します。
サンプル データベースをアンインストールするには
- コマンド プロンプトで、サンプル フォルダーから Cleanup.cmd を実行します。
サンプルを実行するには
Visual Studio 2010 で、ソリューションを開きます。
F6 キーを押してソリューションをコンパイルします。
Ctrl キーを押しながら F5 キーを押して、サンプルをデバッグなしで実行します。
![]() |
---|
サンプルは、既にコンピューターにインストールされている場合があります。続行する前に、次の (既定の) ディレクトリを確認してください。
<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
|