c# - 如何在不实际安装连接器的情况下通过 C# 使用 mysql 连接器连接到 mysql

标签 c# mysql database-connection mysql-connector

我们有一个基于 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/

相关文章:

mysql - PHPMyAdmin Export 中 "Add CREATE DATABASE/USE statement"选项的用途是什么

mysql - 在 mysql 中,对于四个连接字符串,最小池大小是多少?

postgresql - PostgreSQL使Go建立的连接保持开放

postgresql - 如何使用带有 createdb 和 URI 的终端?

c# - 多线程环境中静态类的线程文化

c# - 如何在 Visual Studio 2010 和 .NET 4.0 中使用异步?

c# - 如何使用 MySQL Reader 处理空日期时间

mysql - Delphi - 将 DateTime Null 保存到 DB (ADO/MySQL)

c# - 是否有可能知道在 Visual Studio 2013 中加载了多少个类型的对象

c# - 为什么我的程序在取消BackgroundWorker后执行?