2009-10-12 69 views
8

我想從C#使用System.Data.SQLite提供程序訪問SpatiaLite。當我嘗試加載SpatiaLite擴展,我總是得到SQLite + SpatiaLite問題

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

錯誤,即使spatialite的DLL已經被複制到bin目錄。我甚至嘗試指定dll的絕對路徑,但無濟於事。

下面的代碼:

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

this link給我的感覺這應該工作。

在此先感謝

回答

7

好感謝sqlite3.exe命令行工具,我發現了,有需要運行一些這方面的額外的DLL:

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

您可以找到這些在SpatiaLite's download page。只需將它們複製到bin目錄即可。

UPDATE:需要一個額外的DLL是libiconv2.dll

+0

副本應用程序的bin目錄或系統文件夾?我無法得到它的工作..任何線索? – vinayan 2012-11-02 07:28:56

+0

從我記得的@vinayan中,我將它們作爲文件添加到C#項目,然後將它們的屬性設置爲「Copy if newer」。所以是的,他們在應用程序的bin目錄中。 – 2012-11-02 08:13:30

3

有相同問題的Java。我爲所有依賴DLL調用了System.load(),並且所有工作都像冠軍!

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