Как подключиться к MySQL, используя MySQL соединитель через C # без фактической установки соединителя - PullRequest
8 голосов
/ 18 июня 2011

У нас есть продукт C # на основе dot net 2.0, который использует Mysql в качестве хранилища данных.Когда мы устанавливаем соединитель mysql 6.3.6 на компьютер с XP / Win 7, мы можем без проблем подключаться к базе данных из кода C #.Но мы сталкиваемся с проблемой при подключении к базе данных mysql, когда соединитель mysql на самом деле не установлен на машине, а просто находится в том же каталоге, что и исполняемый файл.Мы не хотим устанавливать соединитель на каждом компьютере, на котором мы хотим, чтобы продукт работал.Мы хотим, чтобы dll-коннектор использовался напрямую, так как мы используем любые dll сторонних производителей (например, logger) в нашем коде.

Даже когда мы копируем mysql.data.dll в тот же каталог, где установлен exe,он создает, но не подключается к базе данных.

Ошибка:

Невозможно найти запрошенный поставщик данных .Net Framework.Может быть не установлен Blockquote

Техническая информация:

  • Mysql 5.0
  • C #
  • Dot Net framework 2.0
  • Mysql Connector 6.3.6 (та же проблема возникает с версией 6.0.3 SQL-коннектора)
  • Win XP / Win 7

Когда мы используем ASP.Net, мы можемукажите приведенный ниже тег в web.config, и мы можем подключиться к базе данных mysql напрямую, поместив dll в каталог bin


<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 # для приложения Client Server в среде рабочего стола.

Ответы [ 3 ]

2 голосов
/ 07 июля 2011

Попробуйте что-то вроде этого (я не проверял любые возможные версии / конфигурации, но в настоящее время он работает на моей Vista x64 для MySql около 5.5 ... и .net разъем 6.4.3.0 - с использованием mysql.data.dll для v4 из .net / моно скачать).

Убедитесь, что указанная ниже сборка 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);
    }
}
0 голосов
/ 29 июня 2011

Эта запись:

<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>

... должна быть записана в ваш machine.config.

Я считаю, что путь по умолчанию должен выглядеть примерно так:

C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG

Обновление
Вы должны иметь возможность включить установщик MySQL .Net / Connector как часть вашего установочного пакета.Запись в machine.config требуется по тем же причинам, по которым требуется информация в web.config.

0 голосов
/ 18 июня 2011

Эта страница не дает подробных сведений о зависимости .NET Framework, но я подозреваю, что коннектор Mysql может зависеть от более поздней версии .NET Framework.

Другими словами, ваше приложение использует Framework 2, но какую версию использует соединитель Mysql?

...