2009-10-12 9 views
8

Estoy intentando acceder a SpatiaLite desde C# utilizando el proveedor de System.Data.SQLite. Cuando intento cargar la extensión SpatiaLite, siempre me sale el errorProblemas de SQLite + SpatiaLite

System.Data.SQLite.SQLiteException: SQLite error 
The specified module could not be found. 

, a pesar de que la DLL de SpatiaLite se ha copiado en el directorio bin. Incluso traté de especificar la ruta absoluta a la DLL, pero fue en vano.

Aquí está el código:

string connectionString = @"Data Source=D:\MyStuff\projects\OsmUtils\trunk\Data\Samples\DB\osm.sqlite"; 
using (SQLiteConnection connection = new SQLiteConnection (connectionString)) 
{ 
    connection.Open(); 

    using (SQLiteCommand command = connection.CreateCommand()) 
    { 
     command.CommandText = @"SELECT load_extension('libspatialite-1.dll');"; 
     command.ExecuteScalar(); 
    } 
    ... 

De this link tengo la impresión de que esto debería funcionar.

Gracias de antemano

Respuesta

7

Bueno, gracias a sqlite3.exe herramienta de línea de comandos, he descubierto que hay algunos archivos DLL adicionales necesarios para esto para ejecutar:

  • libproj-0.dll
  • libgeos-3-1-1.dll
  • libgeos_c-1.dll

Usted puede encontrar estos en SpatiaLite's download page. Solo cópielos en el directorio bin.

ACTUALIZACIÓN: una DLL adicional que se necesita es libiconv2.dll

+0

copia a ¿directorio bin de la aplicación o a la carpeta del sistema? No puedo hacer que funcione ... ¿Alguna pista? – vinayan

+0

@vinayan por lo que recuerdo, los agregué como archivos al proyecto C# y luego establecí sus propiedades en "Copiar si es más nuevo". Entonces, sí, están en el directorio bin de la aplicación. –

3

que tenía el mismo problema en Java. Llamé al System.load() para todas las DLL dependientes y todo funcionó como un campeón.

  • libproj-0.dll
  • libgeos-3-1-1.dll
  • libgeos_c-1.dll
  • libiconv2.dll
  • libcharset1.dll