SQL Server Compact 4: Unable to load the native components

 ·  ☕ 2 min  ·  ✍️ eiximenis

    Nota: Este post ha sido importado de mi blog de geeks.ms. Es posible que algo no se vea del todo "correctamente". En cualquier caso puedes acceder a la versión original aquí

    Buenas! Un post ligerito, ligerito 🙂

    Ando esos días probando cosillas con SQL Server Compact 4 (que os podéis descargar desde su página de descargas o bien usando Web Platofrm Installer).

    Habiendo probado código con EF 4 Code First que estaba funcionando bien, empecé otras pruebas usando el proveedor propio de ADO.NET. Así que agregué una referencia a la System.Data.SqlServerCe.dll que viene con SQL Server Compact 4, y cree una conexión:

    SqlCeConnection con = new SqlCeConnection()

    <p>
      Pues bien, al crear la conexión (fijaos que aquí no hay cadena de conexión, todavía no me conecto a ningún .sdf) ya me salta una <em>SqlCeException</em>:
    </p>
    
    <p>
      <em>Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8402. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.</em>
    </p>
    
    <p>
      Hombre, es de agradecer que la propia excepción te diga un KB que consultar, así que ni corto ni perezoso me dirigo al <a href="http://support.microsoft.com/kb/974247">KB974247</a>, pero nada de lo que dice es aplicable en mi caso.
    </p>
    
    <p>
      Descartando el hecho de que sea una mala instalación (puesto que con EF 4 Code First era capaz de conectarme) me puse a mirar que podría estar pasando… y la respuesta final es que <strong>se deben copiar los binarios de SQL Server Compact 4 a la carpeta bin</strong> de la aplicación.
    </p>
    
    <p>
      En mi caso SQL Server Compact 4 se ha instalado en <em>C:Program FilesMicrosoft SQL Server Compact Editionv4.0</em> y los binarios que he copiado son las carpetas <em>x86</em> y <em>amd64</em> que están en la carpeta <em>Private</em>. De hecho en mi caso me basta con la carpeta x86 puesto que mi máquina es de 32 bits.
    </p>
    
    <p>
      Así pues en el bin/Debug de mi aplicación tengo mi aplicación, la <em>System.Data.SqlServerCe.dll</em> y la carpeta x86 con los binarios de SQL Server Compact 4.
    </p>
    
    <p>
      Y entonces me funciona todo correctamente.
    </p>
    
    <p>
      Un saludo!
    </p>
    
    <p>
      PD: Y de regalo, os dejo (por si no lo conocíais) el enlace de <a href="http://sqlcetoolbox.codeplex.com/">una extensión, llamada SqlCeToolbox, para vs2010 para poder tratar con ficheros .sdf de la versión 4</a> (sinó la <em>otra</em> manera que hay es usar WebMatrix que tiene un diseñador de tablas, pero me parece más potente esta exensión).
    </p>
    
    Si quieres, puedes invitarme a un café xD

    eiximenis
    ESCRITO POR
    eiximenis
    Compulsive Developer