我们有一个基于 dot net 2.0 的 C# 产品,它使用 Mysql 作为数据存储。当我们在 XP/Win 7 机器上安装 mysql 连接器 6.3.6 时,我们能够从 C# 代码连接到数据库,没有任何问题。但是我们在连接到 mysql 数据库时遇到了一个问题,因为 mysql 连接器实际上没有安装在机器上,而只是存在于与可执行文件相同的目录中。我们不想在我们希望产品运行的每台机器上都安装连接器。我们希望直接使用连接器 dll,因为我们在代码中使用任何第 3 方 dll(例如记录器)。
即使我们将 mysql.data.dll 复制到安装 exe 的同一目录中,它也会构建但不会连接到数据库。
给出的错误是
Unable to find the requested .Net Framework Data Provider. It may not be installed Blockquote
技术信息:
- MySQL 5.0
- C#
- 点网框架 2.0
- Mysql Connector 6.3.6(sql connector ver 6.0.3 出现同样的问题)
- Win XP/Win 7
当我们使用ASP.Net时,我们可以在web.config中指定下面给出的标签,将dll放到bin目录下就可以直接连接mysql数据库
<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=5.0.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
为什么我们不能在 C# 中为桌面环境中的客户端服务器应用程序做同样的事情。
最佳答案
尝试这样的事情(我没有检查任何可能的版本/配置,但它目前适用于我的 Vista x64 for MySql some 5.5...和 .net connector 6.4.3.0 - 使用 mysql.data.dll for v4从 .net/mono 下载)。
确保下面引用的 mysql.data.dll 程序集在您的当前目录中。
using(var dt = new DataTable()) { dt.Columns.Add("Name"); dt.Columns.Add("Description"); dt.Columns.Add("InvariantName"); dt.Columns.Add("AssemblyQualifiedName"); dt.Rows.Add("Mysql something", "mysql more", "mysqlClient", "MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.4.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"); var f = DbProviderFactories.GetFactory(dt.Rows[0]); using(var conn = f.CreateConnection()) { conn.ConnectionString = "your string here"; conn.Open(); // and do your work here. Console.WriteLine(conn); } }
关于c# - 如何在不实际安装连接器的情况下通过 C# 使用 mysql 连接器连接到 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6395795/