2009-10-12 97 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