SQLite + SpatiaLite问题

8
我正在尝试使用System.Data.SQLite提供程序从C#访问SpatiaLite。当我尝试加载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();
    }
    ...

这个链接上看,我认为这应该可以解决问题。

提前感谢。

2个回答

7
感谢sqlite3.exe命令行工具,我发现需要一些额外的DLL才能运行:
  • libproj-0.dll
  • libgeos-3-1-1.dll
  • libgeos_c-1.dll
您可以在SpatiaLite下载页面找到它们。只需将它们复制到bin目录即可。 更新:还需要一个附加的dll:libiconv2.dll

将其复制到应用程序的bin目录还是系统文件夹?我无法让它工作..有什么线索吗? - vinayan
根据我记得的,我将它们作为文件添加到了 C# 项目中,然后将它们的属性设置为“如果更新则复制”。所以,是的,它们在应用程序的 bin 目录中。 - Igor Brejc

3

我在Java中遇到了完全相同的问题。我为所有依赖的DLL调用了System.load(),然后一切都像个冠军一样运行!

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接