获得适用于x64 c的SpatiaLite + SQLite系统#

Def*_*Day 10 c# database sqlite gis spatialite

我需要在x64窗口下创建和访问一个spaceite扩展的SQLite数据库.

我已经下载了所谓的最新版本1.0.92.0 sqlite-netFx45-static-binary-bundle-x64-2012-1.0.92.0.zipSystem.Data.SQLite.它是从我的Visual Studio(2012)项目中引用的,并且它本身似乎工作得很好.

我还有最新的预编译x64 spatiaLite版本4.1.1,名为spatialite-4.1.1-DLL-win-amd64.zip来自spatialite的所有dll都存在于执行目录中.

当我尝试加载扩展时:

using (var conn = new SQLiteConnection("Data Source=\"" + _sqLiteFullName + "\""))
{
    conn.Open();
    conn.EnableExtensions(true);
    conn.LoadExtension("libspatialite-4.dll");
    ...
}
Run Code Online (Sandbox Code Playgroud)

我得到一个AccessViolationException(试图读取受保护的内存.这通常表明其他内存已损坏)LoadExtension().

我注意到使用PE Deconstructor(确定dll/exe的bitnewss的软件),它说我的System.Data.SQLite.dll(来自x64包)的副本实际上是32位.那是问题吗?

我该如何解决这个问题?

有没有其他人让spatiaLite在x64上工作?

tem*_*ema 2

实际上,问题可能出在spatialite-4.dll中,今年我花了一周时间试图解决同样的问题,但没有成功。看起来spatialite-4.dll中有问题(我的意思是从gaia-sins(官方spatialite站点)下载的这个)你可以尝试从源代码构建一个Spatialite(就像一场噩梦(:)或尝试寻找另一个构建 .dll。第二个选项帮助了我。顺便说一句,您需要使用 Spatialite 扩展名有几个 .dll:

  1. libsqlite3-0.dll
  2. libgeos-3-0-2.dll
  3. libgeos-c-1.dll
  4. libiconv2.dll
  5. libproj-0.dll
  6. libvirtualtext-2.dll
  7. libspatialite-2.dll <----- Spatialite v.2 完全适合我的项目。正如我所说,如果您需要 v.4,您可以尝试构建它或寻找另一个构建。希望这可以帮助