得到一个工作的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-4.dll今年秋天,我花了一个星期的时间试图解决同样的问题,但没有成功。看起来在spatialite .dll中存在问题(我的意思是这个从gaia-sins(官方spatialite网站)下载)您可以尝试从源代码(像噩梦(:))构建一个Spatialite,或者尝试寻找.dll的另一个构建。第二个选择帮助了我。顺便说一句,要使用Spatialite扩展,需要使用几个.dll:
- libsqlite3 - 0. - dll
- libgeos - 3 - 0 - 2. - dll
- libgeos - c - 1. - dll
- libiconv2.dll
- libproj - 0. - dll
- libvirtualtext - 2. - dll
- 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");