Atividades de acesso a base de dados

As atividades de acesso a base de dados permitem que você acesse um base de dados em um fluxo de trabalho. Essas atividades permitem acessar bancos de dados para recuperar ou modificar informações e usar ADO.NET para acessar o banco de dados.

Atividades de base de dados

As seções a seguir detalham a lista de atividades incluídas no exemplo DbActivities.

DbUpdate

Executa uma consulta SQL que gerencia uma alteração na base de dados (inserção, atualização, exclusão, e outras alterações).

Essa classe executa seu trabalho de forma assíncrona (deriva de AsyncCodeActivity e usa seus recursos assíncronas).

Informações de conexão pode ser configurado definindo um nome invariável do provedor (ProviderName) e a cadeia de conexão (ConnectionString) ou usando apenas um nome da cadeia de conexão (ConfigFileSectionName) do arquivo de configuração do aplicativo.

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

A consulta seja executada é configurado em sua propriedade de Sql e os parâmetros são passados através da coleção de Parameters .

Após DbUpdate é executado, o número de registros afetados é retornado na propriedade de 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; }
}
Argumento Descrição
ProviderName Invariável nome do provedor ADO.NET. Se esse argumento é definido, então ConnectionString também deve ser definido.
ConnectionString Cadeia de conexão para se conectar a base de dados. Se esse argumento é definido, então ProviderName também deve ser definido.
ConfigName Nome da seção do arquivo de configuração onde as informações de conexão é armazenada. Quando esse argumento é ajustado ProviderName e ConnectionString não são necessários.
CommandType Tipo de DbCommand a ser executado.
Sql O comando SQL a ser executado.
Parâmetros Coleção de parâmetros de consulta SQL.
AffectedRecords Número de registros afetados pela operação a mais recente.

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

DbQueryScalar

Executa uma consulta que recupera um único valor de base de dados.

Essa classe executa seu trabalho de forma assíncrona (deriva de AsyncCodeActivity<TResult> e usa seus recursos assíncronas).

Informações de conexão pode ser configurado definindo um nome invariável do provedor (ProviderName) e a cadeia de conexão (ConnectionString) ou usando apenas um nome da cadeia de conexão (ConfigFileSectionName) do arquivo de configuração do aplicativo.

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

A consulta seja executada é configurado em sua propriedade de Sql e os parâmetros são passados através da coleção de Parameters .

Após a execução de DbQueryScalar, o escalar é retornado no argumento Result out (do tipo TResult, que é definido na classe base 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; }
}
Argumento Descrição
ProviderName Invariável nome do provedor ADO.NET. Se esse argumento é definido, então ConnectionString também deve ser definido.
ConnectionString Cadeia de conexão para se conectar a base de dados. Se esse argumento é definido, então ProviderName também deve ser definido.
CommandType Tipo de DbCommand a ser executado.
ConfigName Nome da seção do arquivo de configuração onde as informações de conexão é armazenada. Quando esse argumento é ajustado ProviderName e ConnectionString não são necessários.
Sql O comando SQL a ser executado.
Parâmetros Coleção de parâmetros de consulta SQL.
Result Escalar que é obtido depois que a consulta é executada. Esse argumento é do tipo TResult.

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

DbQuery

Executa uma consulta que recupera uma lista de objetos. Após a execução da consulta, uma função de mapeamento é executada (pode ser Func<TResult><DbDataReader, TResult> ou um ActivityFunc<TResult><DbDataReader, TResult>). Essa função de mapeamento obtém um registro em DbDataReader e mapear-lo ao objeto a ser retornado.

Informações de conexão pode ser configurado definindo um nome invariável do provedor (ProviderName) e a cadeia de conexão (ConnectionString) ou usando apenas um nome da cadeia de conexão (ConfigFileSectionName) do arquivo de configuração do aplicativo.

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

A consulta seja executada é configurado em sua propriedade de Sql e os parâmetros são passados através da coleção de Parameters .

Os resultados da consulta SQL são recuperados usando DbDataReader. A atividade itera com DbDataReader e mapeia as linhas em DbDataReader a uma instância de TResult. O usuário de DbQuery deve fornecer o código de mapeamento e isso pode ser feito de duas maneiras: usando um Func<TResult><DbDataReader, TResult> ou um ActivityFunc<TResult><DbDataReader, TResult>. No primeiro caso, o mapa é feito em um único pulso de execução. Portanto, é mais rápido, mas isto não pode ser serializado em XAML. No último caso, o mapa é executado em vários pulsos. Portanto, pode ser mais lento mas pode ser serializada para XAML e ser criado declarativamente (quaisquer atividades existente pode participar no mapeamento).

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; }
}
Argumento Descrição
ProviderName Invariável nome do provedor ADO.NET. Se esse argumento é definido, então ConnectionString também deve ser definido.
ConnectionString Cadeia de conexão para se conectar a base de dados. Se esse argumento é definido, então ProviderName também deve ser definido.
CommandType Tipo de DbCommand a ser executado.
ConfigName Nome da seção do arquivo de configuração onde as informações de conexão é armazenada. Quando esse argumento é ajustado ProviderName e ConnectionString não são necessários.
Sql O comando SQL a ser executado.
Parâmetros Coleção de parâmetros de consulta SQL.
Mapeador Função de mapeamento (Func<TResult><DbDataReader, TResult>) que utiliza um registro em DataReader obtido como resultado da execução da consulta e retorna uma instância de um objeto do tipo TResult a ser adicionada à coleção Result.

Nesse caso, o mapeamento é feito em um único pulso de execução, mas não pode ser criado declarativamente usando o designer.
MapperFunc Função de mapeamento (ActivityFunc<TResult><DbDataReader, TResult>) que utiliza um registro em DataReader obtido como resultado da execução da consulta e retorna uma instância de um objeto do tipo TResult a ser adicionada à coleção Result.

Nesse caso, o mapeamento é feito em vários pulsos de execução. Essa função pode ser serializada para XAML e ser criado declarativamente (quaisquer atividades existente pode participar no mapeamento).
Result Lista de objetos obtidos como o resultado de executar a consulta e executar a função de mapeamento para cada registro em DataReader.

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

DbQueryDataSet

Executa uma consulta que retorna DataSet. Essa classe executa seu trabalho de forma assíncrona. Deriva de AsyncCodeActivity<TResult> e usa seus recursos assíncronas.

Informações de conexão pode ser configurado definindo um nome invariável do provedor (ProviderName) e a cadeia de conexão (ConnectionString) ou usando apenas um nome da cadeia de conexão (ConfigFileSectionName) do arquivo de configuração do aplicativo.

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

A consulta seja executada é configurado em sua propriedade de Sql e os parâmetros são passados através da coleção de Parameters .

Após a execução de DbQueryDataSet, DataSet é retornado no argumento Result out (do tipo TResult, que é definido na classe base 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; }
}
Argumento Descrição
ProviderName Invariável nome do provedor ADO.NET. Se esse argumento é definido, então ConnectionString também deve ser definido.
ConnectionString Cadeia de conexão para se conectar a base de dados. Se esse argumento é definido, então ProviderName também deve ser definido.
ConfigName Nome da seção do arquivo de configuração onde as informações de conexão é armazenada. Quando esse argumento é ajustado ProviderName e ConnectionString não são necessários.
CommandType Tipo de DbCommand a ser executado.
Sql O comando SQL a ser executado.
Parâmetros Coleção de parâmetros de consulta SQL.
Result DataSet que é obtido depois que a consulta é executada.

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

Configurar informações de conexão

Qualquer compartilhamento de DbActivities os mesmos parâmetros de configuração. Podem ser configurados em duas maneiras:

  • ConnectionString + InvariantName: Defina o nome e a cadeia de conexão invariável do provedor 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: Defina o nome da seção de configuração que contém informações de conexão.

    <connectionStrings>
        <add name="DbActivitiesSample"
              providerName="System.Data.SqlClient"
              connectionString="Data Source=.\SQLExpress;Initial Catalog=DbActivitiesSample;Integrated Security=true"/>
      </connectionStrings>
    

    Na atividade:

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

Importante

A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.

Executar esta amostra

Instruções de configuração

Este exemplo usa uma base de dados. Um script de instalação e de carregamento (Setup.cmd) é fornecido com o exemplo. Você deve executar esse arquivo usando o prompt de comando.

O script de Setup.cmd chama o arquivo de script CreateDb.sql, que contém os comandos SQL que façam o seguinte:

  • Cria um base de dados chamado DbActivitiesSample.
  • Cria as funções da tabela.
  • Cria a tabela employees.
  • Insere três registros nas funções da tabela.
  • Insere doze registros na tabela employees.

Para executar Setup.cmd

  1. Abra um prompt de comando.

  2. Vá para a pasta de DbActivities.

  3. Digite "setup.cmd" e pressione Enter.

    Observação

    Setup.cmd tentar instalar o exemplo em sua instância de SqlExpress do computador local. Se você deseja instalá-lo em outra instância do SQL server, a edição Setup.cmd com o novo nome da instância.

Para executar a amostra

  1. Abra a solução no Visual Studio.
  2. Para criar a solução, pressione Ctrl+Shift+B.
  3. Para executar o exemplo sem depuração, pressione Ctrl+F5.

Para desinstalar o banco de dados de exemplo, execute Cleanup.cmd na pasta de exemplo em um prompt de comando.

Importante

Os exemplos podem já estar instalados no seu computador. Verifique o seguinte diretório (padrão) antes de continuar.

<InstallDrive>:\WF_WCF_Samples

Se esse diretório não existir, vá para Windows Communication Foundation (WCF) e Windows Workflow Foundation (WF) Samples for .NET Framework 4 para baixar todos os exemplos do Windows Communication Foundation (WCF) e WF. Este exemplo está localizado no seguinte diretório.

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