得到一个工作的SpatiaLite + SQLite系统为x64 c#

本文关键字:SQLite SpatiaLite 系统 x64 工作 一个 | 更新日期: 2023-09-27 17:53:52

我需要在x64 windows下创建和访问空间扩展的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");
    ...
}

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

我注意到当用PE解构器(确定dll/exe的位新闻的软件)查看时,它说我的System.Data.SQLite.dll(来自x64包)的副本实际上是32位的。这是问题所在吗?

我该如何补救?

其他人是如何让spatiaLite在x64上工作的?

得到一个工作的SpatiaLite + SQLite系统为x64 c#

实际上,问题可能在spatialite-4.dll今年秋天,我花了一个星期的时间试图解决同样的问题,但没有成功。看起来在spatialite .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完全适合我的项目。正如我所说,如果您需要v4,您可以尝试构建它或寻找另一个构建。希望,这有助于

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

示例代码:

//SELECT load_extension("mod_spatialite") // doesn't need the '.dll' suffix.
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 Groups讨论:

https://groups.google.com/forum/!主题/spatialite-users u2QZpQL_6ek

最新的解决方案是Dominik:

我刚刚发现,黑客描述了http://blog.jrg.com.br/2016/04/25/Fixing-spatialite-loading-problem/的第二个最新版本的dll只能使用mingw64
mingw-w64-bin_x86_64-linux_20131228.tar。bz2从获取http://netassist.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Automated%20Builds/mingw-w64-bin_x86_64-linux_20131228.tar.bz2。
对可用的最新版本进行相同操作的任何尝试sourcefourgehttp://sourceforge.net/projects/mingw-w64/files/latest/download在我的系统上失败。

然而,我可以肯定地确认,我可以加载mod_spatialite与

MyConnection.LoadExtension("mod_spatilite");