Как подключиться к mysql с помощью MySQL connector через C# без фактической установки разъема
У нас есть продукт C# на основе dot net 2.0, который использует Mysql в качестве хранилища данных. Когда мы устанавливаем mysql connector 6.3.6 на машине XP / Win 7, мы можем подключиться к базе данных из кода C# без каких-либо проблем. Но мы сталкиваемся с проблемой при подключении к базе данных mysql, когда mysql connector фактически не установлен на машине, но просто присутствует в том же каталоге, что и исполняемый файл. Мы не хотим устанавливать разъем на каждую машину, которую мы хотим продукт для запуска. Мы хотим, чтобы библиотека dll connectory использовалась напрямую, поскольку мы используем любую стороннюю dll (e.G logger) в нашем коде.
даже когда мы копируем mysql.данные.dll в том же каталоге, где установлен exe, он строит, но не подключается к базе данных.
данная ошибка
не удалось найти запрошенный поставщик данных .Net Framework. Он не может быть установлен Blockquote
технические Информация:
- Mysql 5.0
- C#
- Dot Net framework 2.0
- MySQL Connector 6.3.6 (та же проблема возникает с версией 6.0.3 SQL connector)
- Win XP / Win 7
когда мы используем ASP.Net, мы можем указать тег, приведенный ниже в интернете.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# для приложения клиент-сервер в среде рабочего стола.
3 ответов
попробуйте что-то вроде этого (я не проверял возможные версии/конфигурации, но в настоящее время он работает на моей Vista x64 для MySql some 5.5... и .net connector 6.4.3.0-использование mysql.данные.dll для v4 из .net / mono скачать).
убедитесь, что указанный mysql.данные.сборка 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); } }
этой страница не вдается в подробности о зависимости .NET Framework, но я подозреваю, что соединитель Mysql может зависеть от более поздней версии .NET framework.
другими словами, ваше приложение использует Framework 2, но какую версию использует MySQL connector?
эта запись:
<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:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG
обновление
Вы должны быть в состоянии включить MySQL .Net/Connector installer как часть вашего пакета установки. Запись в машине.config требуется по тем же причинам, что и информация требуется в сети.конфиг.