2009-10-12 12 views
8

Ich versuche, eine SpatiaLite von C# mit System.Data.SQLite Provider zugreifen. Wenn ich versuche, die SpatiaLite Erweiterung zu laden, habe ich immer dieSQLite + SpatiaLite Probleme

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

Fehler, auch wenn die DLL spatialite wurde in das Verzeichnis bin kopiert. Ich habe sogar versucht, den absoluten Pfad zur DLL anzugeben, aber ohne Erfolg.

Hier ist der 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(); 
    } 
    ... 

Von this link ich den Eindruck bekommen, das sollte funktionieren.

Vielen Dank im Voraus

Antwort

7

Nun dank Kommandozeilen-Tool sqlite3.exe, habe ich herausgefunden habe, dass es einige zusätzliche DLLs für diese erforderlich sind auszuführen:

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

Sie diese auffinden. Kopieren Sie sie einfach in das Verzeichnis bin.

UPDATE: eine zusätzliche DLL erforderlich ist libiconv2.dll

+0

Kopie bin-Verzeichnis der Anwendung oder zum Systemordner? Ich kann es nicht funktionieren ... keine Hinweise? – vinayan

+0

@vinayan von dem, woran ich mich erinnere, habe ich sie als Dateien zum C# -Projekt hinzugefügt und dann ihre Eigenschaften auf "Copy if newer" gesetzt. Also ja, sie befinden sich im bin-Verzeichnis der Anwendung. –

3

ich genau das gleiche Problem in Java hatte. Ich rief System.load() für alle abhängigen DLLs und alles funktionierte wie ein Champion!

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