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

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

我已经下载了System.Data.SQLite的最新版本1.0.92.0,名为sqlite-netFx45-static-binary-bundle-x64-2012-1.0.92.0.zip 。 它是从我的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"); ... } 

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

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

我该如何解决这个问题?

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

实际上,问题可能出在spatialite-4.dll这个autmun我花了一个星期试图修复同样的问题而没有成功。 看起来像spatialite-4.dll中存在问题(我的意思是这个下载的forms是gaia-sin(官方空间网站))你可以尝试从源代码构建一个Spatialite(如噩梦(:)或试图寻找另一个构建.dll。第二个选项帮助了我。顺便说一下,你需要使用几个.dll来使用Spatialite扩展:

  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,你可以尝试构建它或寻找另一个构建。 希望这可以帮助

从该站点下载mod_spatialite,选择mod_spatialite-4.2.0-win-amd64.7z。 将所有dll解压缩并复制到程序的bin文件夹中。

示例代码:SELECT load_extension(“mod_spatialite”)//不需要’.dll’后缀。

 using (var cnn = new SQLiteConnection(connStr)) { //connStr = "FullUri=file::memory:?cache=shared;Pooling=True;Max Pool Size=200;"; cnn.Open(); //cnn.EnableExtensions(true); using (SQLiteCommand mycommand = new SQLiteCommand("SELECT load_extension(\"mod_spatialite\")", cnn)) { mycommand.ExecuteNonQuery(); } 

在此处查看此Google网上论坛讨论:

https://groups.google.com/forum/#!topic/spatialite-users/u2QZpQL_6ek

最新的解决方案是Dominik:

我刚刚发现, http ://blog.jrg.com.br/2016/04/25/Fixing-spatialite-loading-problem/中描述的黑客只适用于mingw64的第二个最新版本的dll
来自http://netassist.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Automated%20Builds/mingw-w64-bin_x86_64-linux_20131228.tar的 mingw-w64-bin_x86_64-linux_20131228.tar.bz2 。 bz2 。
任何尝试使用sourcefourge http://sourceforge.net/projects/mingw-w64/files/latest/download上提供的最新版本的尝试都在我的系统上失败。

但是,我绝对可以确认,我可以加载mod_spatialite

MyConnection.LoadExtension("mod_spatilite");