本主题适用于 Windows Workflow Foundation 4。
数据库访问活动可用于在一个工作流内访问数据库。通过这些活动,可以访问数据库以检索或修改信息,并使用 ADO.NET 访问数据库。
![]() |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果该目录不存在,请转到(下载页)以下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:
<安装驱动器>:\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
执行可从数据库检索单个值的查询。
此类采用异步方式执行其工作(它派生自 AsyncCodeActivity 并使用其异步功能)。
通过设置提供程序固定名称 (ProviderName
) 和连接字符串 (ConnectionString
),或仅使用应用程序配置文件中的连接字符串配置名称 (ConfigFileSectionName
),可以配置连接信息。
要执行的查询在其 Sql
属性中配置,并通过 Parameters
集合传递参数。
执行 DbQueryScalar
之后,将在 Result
out 参数中返回标量(此参数为 TResult
类型,并在基类 AsyncCodeActivity 中定义)。
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
集合传递参数。
使用 DbDataReader
检索 SQL 查询的结果。此活动将循环访问 DbDataReader
,并将 DbDataReader
中的行映射到 TResult
的实例。DbQuery
的用户必须提供映射代码。可以通过两种方法执行此操作:使用 Func<DbDataReader
, TResult
> 或 ActivityFunc<DbDataReader
, TResult
>。在第一种情况下,将在单个执行脉冲中完成映射。因此,此方法的速度更快,但无法序列化为 XAML。在后一种情况下,将在多个脉冲中完成映射。因此,此方法的速度较慢,但可序列化为 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 |
映射函数 (Func< 在这种情况下,将在单个执行脉冲中完成映射,但不能使用设计器以声明方式创作它。 |
MapperFunc |
映射函数 (ActivityFunc< 在这种情况下,将在多个执行脉冲中完成映射。此函数可序列化为 XAML,并以声明方式进行创作(任何现有活动均可参与映射)。 |
Result |
对象列表,这些对象是通过执行查询并对 |
DbQueryDataSet
执行可返回 DataSet 的查询。此类以异步方式执行其工作。它派生自 AsyncCodeActivity<TResult
> 并使用其异步功能。
通过设置提供程序固定名称 (ProviderName
) 和连接字符串 (ConnectionString
),或仅使用应用程序配置文件中的连接字符串配置名称 (ConfigFileSectionName
),可以配置连接信息。
要执行的查询在其 Sql
属性中配置,并通过 Parameters
集合传递参数。
执行 DbQueryDataSet
之后,将在 Result
out 参数中返回 DataSet
(此参数为 TResult
类型,并在基类 AsyncCodeActivity 中定义)。
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 共享相同的配置参数。可以通过两种方式进行相关配置:
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。
![]() |
---|
您的计算机上可能已安装这些示例:在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果此目录不存在,请转到 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:
<安装驱动器>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\DbActivities
|