Registro de Provedores de Dados

Visão Geral

Provedores de Dados (ou conectores) são componentes que permitem aos programas se conectarem à diferentes tipos de bancos de dados (SQL Server, Oracle, PostgreSQL, e etc).

No LATROMI, o acesso aos bancos de dados é feito utilizando provedores desenvolvidos para a plataforma Microsoft .NET Framework. Qualquer conector desenvolvido com .NET Framework 4.5.2 (ou inferior) vai funcionar.

Registrando um Provedor de Dados

Alguns provedores de dados são nativos do .NET Framework e não precisam ser registrados, como por exemplo System.Data.SqlClient, usado para acessar bancos de dados SQL Server.

No LATROMI, além dos provedores nativos, temos também o Npgsql, que é usado para conectar bancos de dados PostgreSQL. Este conector não precisa ser registrado, pois o sistema já faz isso internamente.

Para registrar um novo provedor de dados, existem duas maneiras:

  • Registro no GAC + machine.config
  • Registro usando o arquivo DbProviderFactories.xml

Após o registro, o Provedor de dados será listado no cadastro de conexões do LATROMI Client:

image

GAC + machine.config

O Global Assembly Cache (GAC) é um repositório centralizado para o armazenamento de assemblies (DLLs) gerados em .NET. Cada versão do .NET Framework conta com um repositório próprio. Partindo desta premissa, toda vez que um assembly tenha sido adicionado ao GAC, o mesmo estará disponível para uso por qualquer aplicação .NET compatível com a versão da biblioteca adicionada ao repositório.

Machine.config é um arquivo de configuração compartilhado por todos os programas que usam a mesma versão do .NET Framework. Algumas configurações deste arquivo podem ser sobrescrevidas nos arquivos Web.Config e App.Config em cada aplicação.

Uma das sessões deste arquivo, é a DbProviderFactories, onde são registrados os assemblies onde as fábricas de Provedores de Dados estão implementadas.

Usando a abordagem GAC + machine.config para o registro de um Provedor de Dados, este provedor ficará disponível para uso em todos os programas .NET do computador.

Siga os passos a seguir para registrar o Provedor:

  1. Instale o assembly onde a fábrica de Provedores de Dados está implementada no GAC, seguindo as instruções oficiais da Microsoft.

  2. Faça o registro do assembly no arquivo machine.config, na sessão DbProviderFactories. Por exemplo:

    <system.data>
       <DbProviderFactories>
          <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net 
    Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, 
    MySql.Data, Version=8.0.16.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
       </DbProviderFactories>
    </system.data>
    

Os valores para registro no machine.config você provavelmente vai encontrar no site do desenvolvedor do Provedor de Dados.

E além disso, a maioria dos Provedores de Dados possuem algum tipo de instalador, que faz o registro no GAC e no machine.config automaticamente.

Arquivo DbProviderFactories.xml

A configuração dos Provedores de Dados através do arquivo DbProviderFactories.xml é um recurso do LATROMI, e permite o registro dos Provedores de Dados de uma maneira mais simples.

Diferente do método anterior, onde os Provedores de Dados ficam disponíveis em todos os programas, neste método, eles ficarão disponíveis apenas no LATROMI.

Essa é a estrutura do DbProviderFactories.xml:

<?xml version="1.0" encoding="utf-8"?>
<DbProviderFactoryConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <DbProviderFactories>
    <add invariant="NOME.INVARIANTE.DO.PROVEDOR" path="CAMINHO_FISICO_DA_DLL" />
  </DbProviderFactories>
</DbProviderFactoryConfiguration>

A estrutura é muito semelhante a sessão DbProviderFactories do arquivo machine.config, mas possui algumas diferenças:

  • O preenchimento dos atributos “type” e “name” são opcionais.
  • Não possi o atributo “description”.
  • Tem um atributo “path” para informar o caminho físico do arquivo.

Este arquivo deve ficar no diretório raiz do LATROMI Web (mesmo diretório onde fica o arquivo config.xml), e sempre que ele for modificado, a aplicação será reiniciada automaticamente, pois os Provedores de Dados são registrados internamente no evento de inicialização do site.

Abaixo a lista completa de atributos do elemento DbProviderFactories → add :

Atributo Obrigatório Descrição
invariant Sim Nome que pode ser usado programaticamente para se referir ao provedor de dados.
path Sim Caminho físico da DLL
name Nome legível do provedor de dados. Se não for informado, será utilizado o título do assembly.
type Nome totalmente qualificado da classe que implementa DbProviderFactory
O atributo "invariant" não pode ser preenchido com um valor aleatório. Procure no site do fornecedor do Provedor de Dados o nome correto que deve ser utilizado para registro de DbProviderFactory.

Lista de Provedores Conhecidos

Segue abaixo uma lista de Provedores de Dados .NET conhecidos e que podem ser usados no LATROMI.

Invariant Descrição
System.Data.SqlClient MS Sql Server (nativo do .NET Framework)
Npgsql PostgreSQL (nativo do LATROMI)
MySql.Data.MySqlClient MySql
Oracle.ManagedDataAccess.Client Oracle
FirebirdSql.Data.FirebirdClient Firebird
System.Data.SQLite SQLite

Tópicos Relacionados:

tentei adicionar um novo provedor de dados através do segundo método apontado nesse tutorial e acabei gerando um erro, a mensagem de erro aponta para o arquivo machine.config, mais especificamente nessa linha

<system.data>
        <DbProviderFactories><add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=9.0.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/><add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=9.0.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/></DbProviderFactories>
</system.data>

como posso retornar ao provedor original?

Olá @luizmartini!

Perceba que o nessa marcação XML, o provedor de dados “MySql.Data.MySqlClient” está duplicado.

Como o código não está identado, não dá pra perceber em um primeiro momento, mas você tem a seguinte estrutura aí:

<system.data>
	<DbProviderFactories>
		<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=9.0.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
		<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=9.0.0.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
	</DbProviderFactories>
</system.data>

O erro ocorre por causa da linha duplicada. Após a correção, reinicie o Latromi Client e tente novamente.

1 curtida