简洁版本:
如何从 PowerShell 连接到 ODBC 5.1 MySQL 驱动程序?我似乎找不到任何准确包含此特定实例的“提供程序”字段的连接字符串。(请参阅本问题底部的示例/错误)
=====
长版本:
我不是一名服务器人员,但我被赋予了在我们的网络上设置 PowerGadgets 的任务。
我有一个在 Linux 机器上运行的 MySQL 服务器,该服务器配置为远程访问并且还定义了一个用于远程访问的用户。
在我的 Windows 台式电脑上,我安装了 PowerGadgets。我安装了 MySQL ODBC 5.1 连接器,然后转到控制面板 > 数据源并设置到数据库的用户 DSN 连接。
连接、用户和密码似乎是正确的,因为它在我的 Windows 控制面板中列出了数据库的表。
我在 PowerGadgets 中遇到问题的三个地方:
选择数据源时,我可以选择“SQL Server”。输入服务器 IP 地址不起作用,我根本无法使用此选项。
选择数据源时,我可以选择“OleDB”。此屏幕上有一个向导,似乎会为我填充所有正确的信息(包括数据库表名称!)。“测试连接”运行良好。但如果我尝试完成向导,我会收到错误“OLEDB 的 .NET Framework 数据提供程序不支持 ODBC 驱动程序的 MS Ole DB 提供程序。”
选择数据源时,我可以选择“ODBC”。此屏幕没有向导,我无法找出有效的“连接字符串”。通常它会响应错误“缺少字段‘Provider’”。谷歌搜索 ODBC 连接字符串没有显示任何带有“provider”字段的示例,也不知道这里该输入什么。上面的连接字符串(对于 #2)包含“SQLOLEDB”作为提供程序,将该值输入到此连接字符串后,我得到了与 #2 相同的连接错误。
我相信我可以通过找出#3的连接字符串来解决我的问题,但不知道从哪里开始。
(PowerGadgets 也允许 PowerShell 支持,但我相信我会在那里遇到同样的问题)
==
以下是我当前不起作用的 PowerShell 连接:
invoke-sql -connection "Driver={MySQL ODBC 5.1 Driver};Initial Catalog=hq_live;Data Source=HQDB" -sql "Select * FROM accounts"
吐出错误:
"Invoke-Sql : An OLE DB Provider was not specified in the ConnectionString. An example would be, 'Provider=SQLOLEDB;'.
==
另一个不起作用的字符串:
invoke-sql -connection "Provider=MSDASQL.1;Persist Security Info=False;Data Source=HQDB;Initial Catalog=hq_live" -sql "select * from accounts"
错误如下:
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).
答案1
我几乎不知道从哪里开始,所以我只好直接从中间开始。
“SQL Server” 的意思是“Microsoft SQL Server”,这就是为什么它不起作用的原因。出于某种原因,微软喜欢用通用术语来命名他们的产品。
invoke-sql
是 PowerGadgets 的一部分,并在此处记录:http://support.softwarefx.com/SupportDocTree.aspx?Prod=PG10&Type=A
根据稀疏的文档和您收到的错误消息判断,invoke-sql
需要通过以下方式连接到数据库数据库管理系统。从文档中我看不出有任何方法可以告诉它使用什么 ADO.NET 驱动程序,但听起来也许你可以在某种 GUI 中进行设置 — — 有点奇怪,但可以。
ADO.NET 提供了一个兼容层,用于连接仅提供 OLE DB 或 ODBC 驱动程序的数据库。如果您选择“OLE DB”或“ODBC”,那么听起来 PowerGadgets 正在通过该兼容层进行通信(再次从错误消息判断)。
OLE DB 无法正常工作的原因在于您提供的连接字符串告诉 OLE DB 通过另一个兼容层进行连接,以便通过其 ODBC 驱动程序与数据库通信。听起来 ADO.NET 明确禁止这样做,大概是因为通过两个兼容层和一个 ODBC 驱动程序与数据库通信会带来各种麻烦。
MySQL 不提供 OLE DB 驱动程序,但你可以通过安装第三方 MySQL OLE DB 驱动程序(不幸的是,这是一个付费产品,但您可以免费试用几天)。
ODBC 应该可以工作,但听起来好像有什么东西在试图验证您的连接字符串,就好像它是 OLE DB 连接字符串一样。OLE DB 连接字符串包含一个Provider
参数,但我从未在 ODBC 连接字符串中看到过该参数。我对这个有点困惑,但我怀疑是 PowerGadgets 中的一个错误/功能缺陷。
MySQL 提供了名为 Connector/NET 的 ADO.NET 驱动程序。如果您安装了它,那么如果您幸运的话,也许 PowerGadgets 会为您提供使用该驱动程序的选项。我有点怀疑它会不会这样做,但如果确实如此,那么这可能是您的最佳选择。MySQL Connector/NET 连接字符串如下所示:
server=localhost;user=dan;database=stuff;port=3306;password=bla;