Partilhar via


Atividades de acesso à base de dados

As atividades de acesso ao banco de dados permitem que você acesse um banco de dados dentro de 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 banco de dados

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

DbUpdate

Executa uma consulta SQL que produz uma modificação no banco de dados (inserção, atualização, exclusão e outras modificações).

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

As informações de conexão podem ser configuradas definindo um nome invariante do provedor (ProviderName) e a cadeia de conexão (ConnectionString) ou apenas usando um nome de configuração da cadeia de conexão (ConfigFileSectionName) do arquivo de configuração do aplicativo.

Importante

A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.

A consulta a ser executada é configurada em sua Sql propriedade e os parâmetros são passados Parameters pela coleção.

Depois DbUpdate de executado, o número de registros afetados é retornado na AffectedRecords propriedade.

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 Description
ProviderName ADO.NET nome invariante do provedor. Se este argumento é definido, então o ConnectionString deve também ser definido.
ConnectionString Cadeia de conexão para se conectar ao banco de dados. Se este 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 são armazenadas. Quando este argumento é definido ProviderName e ConnectionString não são necessários.
Tipo de comando Tipo de seringa DbCommand a ser executada.
Sql O comando SQL a ser executado.
Parâmetros Coleção dos parâmetros da consulta SQL.
AfetadosRegistros Número de registos afetados pela última operação.

Importante

A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.

DbQueryScalar

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

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

As informações de conexão podem ser configuradas definindo um nome invariante do provedor (ProviderName) e a cadeia de conexão (ConnectionString) ou apenas usando um nome de configuração da cadeia de conexão (ConfigFileSectionName) do arquivo de configuração do aplicativo.

Importante

A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.

A consulta a ser executada é configurada em sua Sql propriedade e os parâmetros são passados Parameters pela coleção.

Depois DbQueryScalar de executado, o escalar é retornado no Result out argumento (do tipo TResult, que é definido na classe AsyncCodeActivity<TResult>base ).

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 Description
ProviderName ADO.NET nome invariante do provedor. Se este argumento é definido, então o ConnectionString deve também ser definido.
ConnectionString Cadeia de conexão para se conectar ao banco de dados. Se este argumento é definido, então ProviderName também deve ser definido.
Tipo de comando Tipo de seringa DbCommand a ser executada.
ConfigName Nome da seção do arquivo de configuração onde as informações de conexão são armazenadas. Quando este argumento é definido ProviderName e ConnectionString não são necessários.
Sql O comando SQL a ser executado.
Parâmetros Coleção dos parâmetros da consulta SQL.
Result Escalar que é obtido depois que a consulta é executada. Este argumento é do tipo TResult.

Importante

A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.

DbQuery

Executa uma consulta que recupera uma lista de objetos. Depois que a consulta é executada, uma função de mapeamento é executada (pode ser Func<TResult>DbDataReader<,> TResultou um<DbDataReaderActivityFunc<TResult> , ). TResult> Essa função de mapeamento obtém um registro em um DbDataReader e o mapeia para o objeto a ser retornado.

As informações de conexão podem ser configuradas definindo um nome invariante do provedor (ProviderName) e a cadeia de conexão (ConnectionString) ou apenas usando um nome de configuração da cadeia de conexão (ConfigFileSectionName) do arquivo de configuração do aplicativo.

Importante

A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.

A consulta a ser executada é configurada em sua Sql propriedade e os parâmetros são passados Parameters pela coleção.

Os resultados da consulta SQL são recuperados usando um DbDataReaderarquivo . A atividade itera através do e mapeia DbDataReader as linhas no DbDataReader para uma instância de TResult. O usuário do tem que fornecer o código de DbQuery mapeamento e isso pode ser feito de duas maneiras: usando umDbDataReaderFunc<TResult>< ,> TResultou um<DbDataReaderActivityFunc<TResult> , . TResult> No primeiro caso, o mapa é feito em um único pulso de execução. Portanto, é mais rápido, mas isso não pode ser serializado para XAML. No último caso, o mapa é realizado em múltiplos pulsos. Portanto, ele pode ser mais lento, mas pode ser serializado para XAML e criado declarativamente (qualquer atividade existente pode participar do 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 Description
ProviderName ADO.NET nome invariante do provedor. Se este argumento é definido, então o ConnectionString deve também ser definido.
ConnectionString Cadeia de conexão para se conectar ao banco de dados. Se este argumento é definido, então ProviderName também deve ser definido.
Tipo de comando Tipo de seringa DbCommand a ser executada.
ConfigName Nome da seção do arquivo de configuração onde as informações de conexão são armazenadas. Quando este argumento é definido ProviderName e ConnectionString não são necessários.
Sql O comando SQL a ser executado.
Parâmetros Coleção dos parâmetros da consulta SQL.
Mapeador Função de mapeamento (Func<TResult>DbDataReader<, TResult>) que usa um registro no DataReader obtido como resultado da execução da consulta e retorna uma instância de um objeto do tipo TResult a ser adicionado à Result coleção.

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

Neste caso, o mapeamento é feito em múltiplos pulsos de execução. Essa função pode ser serializada para XAML e criada declarativamente (qualquer atividade existente pode participar do mapeamento).
Result Lista de objetos obtidos como resultado da execução da consulta e da execução da função de mapeamento para cada registro no DataReader.

Importante

A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.

DbQueryDataSet

Executa uma consulta que retorna um DataSetarquivo . Esta classe executa seu trabalho de forma assíncrona. Ele deriva e AsyncCodeActivity<TResult> usa seus recursos assíncronos.

As informações de conexão podem ser configuradas definindo um nome invariante do provedor (ProviderName) e a cadeia de conexão (ConnectionString) ou apenas usando um nome de configuração da cadeia de conexão (ConfigFileSectionName) do arquivo de configuração do aplicativo.

Importante

A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.

A consulta a ser executada é configurada em sua Sql propriedade e os parâmetros são passados Parameters pela coleção.

Depois que o é executado, DbQueryDataSet o é retornado no Result out argumento (do tipo TResult, que é definido na classe AsyncCodeActivity<TResult>DataSet base).

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 Description
ProviderName ADO.NET nome invariante do provedor. Se este argumento é definido, então o ConnectionString deve também ser definido.
ConnectionString Cadeia de conexão para se conectar ao banco de dados. Se este 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 são armazenadas. Quando este argumento é definido ProviderName e ConnectionString não são necessários.
Tipo de comando Tipo de seringa DbCommand a ser executada.
Sql O comando SQL a ser executado.
Parâmetros Coleção dos parâmetros da consulta SQL.
Result DataSet que é obtido após a execução da consulta.

Importante

A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.

Configurar informações de conexão

Todos os DbActivities compartilham os mesmos parâmetros de configuração. Eles podem ser configurados de duas maneiras:

  • ConnectionString + InvariantName: Defina o nome invariante do provedor de ADO.NET e a cadeia de conexão.

    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 as 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 que você use 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 serão o método de autenticação recomendado.

Executar este exemplo

Instruções de instalação

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

O script Setup.cmd invoca o arquivo de script CreateDb.sql, que contém comandos SQL que fazem o seguinte:

  • Cria um banco de dados chamado DbActivitiesSample.
  • Cria a tabela Funções.
  • Cria a tabela Funcionários.
  • Insere três registros na tabela Funções.
  • Insere doze registros na tabela Funcionários.

Para executar Setup.cmd

  1. Abra uma linha de comandos.

  2. Vá para a pasta de exemplo DbActivities.

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

    Nota

    Setup.cmd tenta instalar o exemplo em sua instância SqlExpress da máquina local. Se você quiser instalá-lo em outra instância do SQL Server, edite-Setup.cmd com o novo nome da instância.

Para executar o exemplo

  1. Abra a solução no Visual Studio.
  2. Para compilar 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 da pasta de exemplo em um prompt de comando.

Importante

As amostras podem já estar instaladas na sua máquina. Verifique o seguinte diretório (padrão) antes de continuar.

<InstallDrive>:\WF_WCF_Samples

Se esse diretório não existir, vá para Exemplos do Windows Communication Foundation (WCF) e do Windows Workflow Foundation (WF) para .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