数据库访问活动

数据库访问活动可用于在一个工作流内访问数据库。 通过这些活动,可以访问数据库以检索或修改信息,并使用 ADO.NET 访问数据库。

数据库活动

以下部分详细介绍了 DbActivities 示例中包含的活动列表。

DbUpdate

执行可在数据库中产生修改(插入、更新、删除和其他修改)的 SQL 查询。

此类采用异步方式执行其工作(它派生自 AsyncCodeActivity 并使用其异步功能)。

通过设置提供程序固定名称 (ProviderName) 和连接字符串 (ConnectionString),或仅使用应用程序配置文件中的连接字符串配置名称 (ConfigFileSectionName),可以配置连接信息。

重要

Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。

要执行的查询在其 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 资源的托管标识这种身份验证方法。

DbQueryScalar

执行可从数据库检索单个值的查询。

此类采用异步方式执行其工作(它派生自 AsyncCodeActivity<TResult> 并使用其异步功能)。

通过设置提供程序固定名称 (ProviderName) 和连接字符串 (ConnectionString),或仅使用应用程序配置文件中的连接字符串配置名称 (ConfigFileSectionName),可以配置连接信息。

重要

Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。

要执行的查询在其 Sql 属性中配置,并通过 Parameters 集合传递参数。

执行 DbQueryScalar 之后,将在 Result out 自变量中返回标量(此自变量为 TResult 类型,并在基类 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
CommandType 要执行的 DbCommand 的类型。
ConfigName 存储连接信息的配置文件部分的名称。 设置此自变量之后,将不再需要 ProviderNameConnectionString
Sql 要执行的 SQL 命令。
参数 SQL 查询的参数集合。
结果 执行查询后获得的标量。 此自变量的类型为 TResult

重要

Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。

DbQuery

执行可检索对象列表的查询。 执行查询后,将执行一个映射函数(它可以为 Func<TResult><DbDataReaderTResult> 或 ActivityFunc<TResult><DbDataReaderTResult>)。 此映射函数在 DbDataReader 中获取一个记录,并将其映射到要返回的对象。

通过设置提供程序固定名称 (ProviderName) 和连接字符串 (ConnectionString),或仅使用应用程序配置文件中的连接字符串配置名称 (ConfigFileSectionName),可以配置连接信息。

重要

Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。

要执行的查询在其 Sql 属性中配置,并通过 Parameters 集合传递参数。

使用 DbDataReader 检索 SQL 查询的结果。 此活动将循环访问 DbDataReader,并将 DbDataReader 中的行映射到 TResult 的实例。 DbQuery 的用户必须提供映射代码。可以通过两种方法执行此操作:使用 Func<TResult><DbDataReaderTResult> 或 ActivityFunc<TResult><DbDataReaderTResult>。 在第一种情况下,将在单个执行脉冲中完成映射。 因此,此方法的速度更快,但无法序列化为 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
ConnectionString 用于连接到数据库的连接字符串。 如果设置此自变量,则必须还要设置 ProviderName
CommandType 要执行的 DbCommand 的类型。
ConfigName 存储连接信息的配置文件部分的名称。 设置此自变量之后,将不再需要 ProviderNameConnectionString
Sql 要执行的 SQL 命令。
参数 SQL 查询的参数集合。
Mapper 映射函数(Func<TResult><DbDataReaderTResult>),它接受在执行查询后获得的 DataReader 中的一个记录,并返回一个 TResult 类型的对象的实例(此实例将被添加到 Result 集合中)。

在这种情况下,将在单个执行脉冲中完成映射,但不能使用设计器以声明方式创作它。
MapperFunc 映射函数(ActivityFunc<TResult><DbDataReaderTResult>),它接受在执行查询后获得的 DataReader 中的一个记录,并返回一个 TResult 类型的对象的实例(此实例将被添加到 Result 集合中)。

在这种情况下,将在多个执行脉冲中完成映射。 此函数可序列化为 XAML,并以声明方式进行创作(任何现有活动均可参与映射)。
结果 对象列表,这些对象是通过执行查询并对 DataReader 中的每个记录执行映射函数得到的。

重要

Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。

DbQueryDataSet

执行可返回 DataSet 的查询。 此类以异步方式执行其工作。 它派生自 AsyncCodeActivity<TResult> 并使用其异步功能。

通过设置提供程序固定名称 (ProviderName) 和连接字符串 (ConnectionString),或仅使用应用程序配置文件中的连接字符串配置名称 (ConfigFileSectionName),可以配置连接信息。

重要

Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。

要执行的查询在其 Sql 属性中配置,并通过 Parameters 集合传递参数。

执行 DbQueryDataSet 之后,将在 Result out 自变量中返回 DataSet(此自变量为 TResult 类型,并在基类 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 命令。
参数 SQL 查询的参数集合。
结果 执行查询后获得的 DataSet

重要

Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。

配置连接信息

所有 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"
    };
    

重要

Microsoft 建议使用最安全的可用身份验证流。 如果要连接到 Azure SQL,建议使用 Azure 资源的托管标识这种身份验证方法。

运行此示例

设置说明

此示例使用一个数据库。 此示例提供了一个安装和加载脚本 (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