Precisa de ajuda para fazer uma conexão ODBC MySQL

2

Versão resumida:

Como faço para conectar-me do PowerShell a um driver ODBC 5.1 MySQL? Não consigo encontrar nenhuma string de conexão que tenha exatamente um campo "Provider" para essa instância específica. (Veja no final desta questão exemplos / erros)

=====

Versão longa:

Eu não sou um servidor e recebi a tarefa de configurar o PowerGadgets em nossa rede.

Eu tenho um servidor MySQL rodando em uma máquina Linux, que está configurada para acesso remoto e tem um usuário definido para acesso remoto também.

No meu PC desktop do Windows, eu tenho o PowerGadgets instalado. Eu instalei o conector ODBC 5.1 do MySQL e fui ao Painel de Controle > Fontes de dados e configurar uma conexão de DSN do usuário para o banco de dados.

A conexão, o usuário e a passagem parecem estar corretos porque lista as tabelas do banco de dados no meu painel de controle do Windows.

Onde estou com problemas em 3 lugares no PowerGadgets:

  1. Ao selecionar uma fonte de dados, posso selecionar "SQL Server". A entrada do endereço IP dos servidores não funciona e não consigo fazer com que essa opção funcione.

  2. Ao selecionar uma fonte de dados, posso selecionar "OleDB". Esta tela tem um assistente, que parece preencher todas as informações corretas (incluindo nomes de tabelas de banco de dados!) Para mim. "Test Connection" é ótimo. Mas, se eu tentar concluir o assistente, recebo o erro "O provedor de dados do .NET Framework para OLEDB não suporta o provedor MS Ole DB para drivers ODBC".

  3. Ao selecionar uma fonte de dados, posso selecionar "ODBC". Esta tela não tem um assistente e não consigo descobrir uma "string de conexão" que funcione. Normalmente, ele responderá com o erro "O campo 'Provedor' está ausente". As strings de conexão do Google Analytics ODBC não revelam nenhum exemplo com um campo "provedor" e não têm ideia do que inserir aqui. A cadeia de conexão (para # 2) acima contém "SQLOLEDB" como um provedor e, ao inserir esse valor nessa cadeia de conexão, recebo o mesmo erro de conexão que o # 2 obtém.

Acredito que posso resolver meus problemas descobrindo uma string de conexão para o número 3, mas não sei por onde começar.

(O PowerGadgets também permite suporte ao PowerShell, mas acredito que vou encontrar o mesmo problema lá)

==

Aqui está minha conexão atual com o PowerShell que não funciona:

invoke-sql -connection "Driver={MySQL ODBC 5.1 Driver};Initial Catalog=hq_live;Data Source=HQDB" -sql "Select * FROM accounts"

Retrocede o erro:

"Invoke-Sql : An OLE DB Provider was not specified in the ConnectionString.  An example would be, 'Provider=SQLOLEDB;'.

==

Outra string que não funciona:

invoke-sql -connection "Provider=MSDASQL.1;Persist Security Info=False;Data Source=HQDB;Initial Catalog=hq_live" -sql "select * from accounts"

E o erro:

The .Net Framework Data Provider for OLEDB (System.Data.OleDb) does not support the Microsoft OLE DB Provider for ODBC Drivers (MSDASQL). Use the .Net Framework Data Provider for ODBC (System.Data.Odbc).
    
por Andy Moore 21.06.2011 / 21:18

1 resposta

1

Eu mal sei por onde começar isso, então vou mergulhar bem no meio.

"SQL Server" significa "Microsoft SQL Server", e é por isso que isso não está funcionando. Por algum motivo, a Microsoft gostaria de nomear seus produtos após termos genéricos.

invoke-sql faz parte do PowerGadgets e está documentado aqui: link

A julgar pela documentação esparsa e pelas mensagens de erro que você está recebendo, invoke-sql espera se conectar a um banco de dados via ADO.NET . A partir da documentação, não vejo como dizer qual driver do ADO.NET usar, mas parece que talvez você possa configurá-lo em algum tipo de GUI - um pouco estranho, mas tudo bem.

O ADO.NET fornece uma camada de compatibilidade para conectar-se a bancos de dados que fornecem apenas drivers OLE DB ou ODBC. Se você escolher “OLE DB” ou “ODBC”, então parece que o PowerGadgets está falando sobre essa camada de compatibilidade (novamente, a julgar pelas mensagens de erro).

A razão pela qual o OLE DB não está funcionando para você é que a cadeia de conexão que você está fornecendo está dizendo ao OLE DB que se conecte por meio de outra camada de compatibilidade para conversar com um banco de dados por meio de seus drivers ODBC. Parece que o ADO.NET especificamente proíbe isso, presumivelmente porque isso faria com que todos os tipos de dor conversassem com um banco de dados através de duas camadas de compatibilidade e um driver ODBC.

O MySQL não fornece um driver OLE DB, mas você pode fazê-lo funcionar instalando um terceiro MySQL Driver OLE DB (infelizmente um produto pago, mas você pode experimentá-lo gratuitamente por alguns dias).

O ODBC deve funcionar, mas parece que algo está tentando validar sua string de conexão como se fosse uma string de conexão OLE DB. As sequências de conexão OLE DB incluem um parâmetro Provider , mas nunca vi esse parâmetro em uma cadeia de conexão ODBC. Estou um pouco perplexo com este, mas suspeito de um bug / falta de funcionalidade no PowerGadgets.

O MySQL fornece um driver ADO.NET chamado Connector / NET . Se você instalar isso, então, se tiver sorte, talvez o PowerGadgets ofereça a opção de usar esse driver. Eu meio que duvido que isso aconteça, mas se isso acontecer, então esta é provavelmente a sua melhor opção. Uma string de conexão do MySQL Connector / NET se parece com:

server=localhost;user=dan;database=stuff;port=3306;password=bla;
    
por 22.06.2011 / 01:54