10

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

我已经下载了名为System.Data.SQLitesqlite-netFx45-static-binary-bundle-x64-2012-1.0.92.0.zip 的最新版本 1.0.92.0 。它是从我的 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 Deconstructor(确定 dll/exe 的 bitnewss 的软件)查看时,它说我的 System.Data.SQLite.dll(来自 x64 包)的副本实际上是 32 位的。那是问题吗?

我该如何补救?

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

4

3 回答 3

2

实际上,问题可能出在spatialite-4.dll这个autmun 我花了一个星期试图解决同样的问题但没有成功。看起来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,您可以尝试构建它或寻找另一个构建。希望这可以帮助
于 2014-04-08T12:19:04.687 回答
2

网站下载 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();
                }
于 2015-04-08T10:10:52.060 回答
1

在此处查看此 Google Groups 讨论:

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

最新的解决方案来自 Dominik:

我刚刚发现,http://blog.jrg.com.br/2016/04/25/Fixing-spatialite-loading-problem/ 中描述的黑客攻击 适用于 mingw64
mingw的第二个最新版本的 dll -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 . 任何尝试对 sourcefourge http://sourceforge.net/projects/mingw-w64/files/latest/download
上 的最新版本进行相同操作的尝试 在我的系统上都失败了。

但是,我可以肯定地确认,我可以加载 mod_spatialite

MyConnection.LoadExtension("mod_spatilite");

于 2017-05-31T11:05:31.530 回答