2011-06-18 16 views
8

Tenemos un producto C# basado en dot net 2.0 que usa Mysql como almacenamiento de datos. Cuando instalamos el conector mysql 6.3.6 en la máquina XP/Win 7, podemos conectarnos a la base de datos desde el código C# sin ningún problema. Pero nos enfrentamos a un problema al conectarnos a la base de datos mysql cuando el conector mysql no está realmente instalado en la máquina, pero solo está presente en el mismo directorio que el ejecutable. No deseamos instalar el conector en todas y cada una de las máquinas en las que queremos que se ejecute el producto. Queremos que el dll de conexión se use directamente ya que usamos cualquier dll de terceros (por ejemplo, registrador) en nuestro código.Cómo conectarse a mysql usando el conector mysql mediante C# sin instalar realmente el conector

Incluso cuando copiamos mysql.data.dll en el mismo directorio donde está instalado el exe, se compila pero no se conecta a la base de datos.

El error dado es

No se pudo encontrar el proveedor de datos de .NET Framework solicitado. No se puede instalar Blockquote

Información técnica:

  • Mysql 5.0
  • C#
  • Dot Net marco 2.0
  • Conector Mysql 6.3.6 (mismo problema ocurre con ver 6.0 .3 del conector sql)
  • Win XP/Win 7

Cuando estamos utilizando ASP.Net, podemos especificar la etiqueta dada a continuación en el web.config, y que se puede conectar a la base de datos MySQL directamente poniendo la DLL en el directorio 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> 

¿Por qué no podemos hacer lo mismo en C# para la aplicación Client Server en el entorno de escritorio?

Cualquier ayuda es realmente apreciada.

Kalpak

+0

¿Pones la misma configuración en el 'app.config' de tu aplicación de escritorio? – Jon

+0

No pusimos la misma configuración en la aplicación.config. La etiqueta DBProviderFactories parece no ser válida en app.config – Kalpak

+0

Esta pregunta me habría ahorrado un par de dolores de cabeza hace un mes. Toda la instalación de .Net Connector (de lo que yo entiendo) es agregar la entrada "Proveedor de datos MySQL" a machine.config. No usé el instalador y simplemente agregué la entrada a mi configuración. Estaba apagado y funcionando con .Net ProviderFactories. – IAbstract

Respuesta

2

Probar algo como esto (no revisé ninguna posible versión/configuración, pero funciona actualmente en mi Vista x64 para MySql algunos 5.5 ... y conector .net 6.4.3.0 - usando mysql.data.dll para v4 desde la descarga de .net/mono).

Asegúrese de que el ensamblado mysql.data.dll al que se hace referencia a continuación se encuentre en su directorio actual.

 
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

Hola, me ha funcionado. ¿Existe algún inconveniente en el uso de este método aparte de la instalación del conector, como en términos de codificación, rendimiento o seguridad, etc.? – Kalpak

+0

No hay inconveniente en este método que no sea duplicar mysql.data.dll para todas las aplicaciones que lo necesiten. Entonces, si solo tienes uno, entonces esto está perfectamente bien. En mi caso, hay varios, así que terminé colocando ensamblajes de mysql en GAC y modificando machine.config's en todos los lugares correctos, así que solo podía usar DbProviderFactories.GetFactory ("string here I given in configs") para obtener la fábrica y pasar de ahí. Simplemente me gusta usar esos dll's de distribución .net/mono, teniendo que configurar cosas manualmente como resultado. –

0

Este page no entra en muchos detalles acerca de la dependencia de .NET Framework, pero sospecho que el conector de MySQL puede depender de una versión posterior de la plataforma .NET.

En otras palabras, su aplicación usa Framework 2, pero ¿qué versión usa el conector Mysql?

+0

Es compatible con v2 y v4 de dot net. – Kalpak

+0

6.3. * Es compatible con ADO.NET versión 2.x +, .NET Framework versión 2.x +, 4.x + para compatibilidad con VS 2010 y MySQL Server versión 5.0, 5.1, 5.4, 5.5 según el sitio web de mysql – Kalpak

+0

Me refiero al enlace http://dev.mysql.com/doc/refman/5.0/en/connector-net-versions.html – Kalpak

0

Esta entrada:

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

... necesita ser escrita en su machine.config.

creo que la ruta predeterminada debe ser algo como:

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

actualización
Usted debe ser capaz de incluir instalador/MySQL Connector Net como parte de su paquete de instalación. La entrada en machine.config es necesaria por las mismas razones por las que se requiere información en un web.config.

+0

Las personas que instalan el software no son técnicamente correctas. Por lo tanto, no podemos darles la opción de agregar esta entrada manualmente. Es posible esta entrada a través del instalador de NSIS. – Kalpak

+0

Por qué esta entrada es obligatoria en primer lugar sería mi pregunta – Kalpak

Cuestiones relacionadas