2009-10-12 10 views
8

J'essaie d'accéder à un SpatiaLite à partir de C# en utilisant le fournisseur System.Data.SQLite. Lorsque je tente de charger l'extension SpatiaLite, je reçois toujours leProblèmes SQLite + SpatiaLite

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

, même si la dll du spatialite a été copié dans le répertoire bin. J'ai même essayé de spécifier le chemin absolu vers la DLL, mais en vain.

Voici le code:

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 j'ai l'impression que cela devrait fonctionner.

Merci à l'avance

Répondre

7

Eh bien grâce à sqlite3.exe outil de ligne de commande, je l'ai découvert qu'il ya des DLL supplémentaires nécessaires à cette option pour exécuter:

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

Vous pouvez trouver sur SpatiaLite's download page. Copiez-les simplement dans le répertoire bin.

MISE À JOUR: une dll supplémentaire nécessaire est libiconv2.dll

+0

copie à répertoire bin de l'application ou dans le dossier système? Je ne peux pas le faire fonctionner ... des indices? – vinayan

+0

@vinayan d'après ce dont je me souviens, je les ai ajouté en tant que fichiers au projet C#, puis définissez leurs propriétés sur "Copier si plus récent". Alors oui, ils sont dans le répertoire bin de l'application. –

3

J'ai eu exactement le même problème dans Java. J'ai appelé System.load() pour toutes les DLL dépendantes et tout a fonctionné comme un champion!

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