2014-03-26 74 views
9

我需要在x64窗口下創建並訪問空間擴展SQLite數據庫。獲取適用於x64的SpatiaLite + SQLite系統c#

我已經下載了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 Deconstructor(確定dll/exe的bitnewss的軟件)看時,它說System.Data.SQLite.dll(來自x64包)的副本實際上是32位。這是問題嗎?

如何對此進行補救?

其他人如何讓spatiaLite在x64上工作?

回答

2

實際上,問題可能在spatialite-4.dll這autmun我花了一個星期試圖解決同樣的問題沒有成功。它看起來像有點spatialite-4.dll中的問題(我的意思是這個下載表格gaia-sins(官方空間站點)) 你可以嘗試從源頭(如惡夢(:))或建立一個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,你可以嘗試構建它或尋找另一個構建。 希望,這有助於從site
2

下載mod_spatialite,選擇mod_spatialite-4.2.0-雙贏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(); 
       } 
+1

這工作,但讓我在VS2017的錯誤。 –

+0

所以我發現了這個問題。如果此代碼仍然無法運行,因爲mod_spatialite附帶了錯誤的libstdC++ _ 64-6.dll。在這裏工作。 http://blog.jrg.com.br/2016/04/25/Fixing-spatialite-loading-problem/ –

1

在這個谷歌小組討論看看這裏:

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

最新的解決方案是由多米尼克:

我剛剛發現,該黑客在 描述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
任何嘗試使用 源地址 http://sourceforge.net/projects/mingw-w64/files/latest/download 可用的最新版本都可能會在我的系統上失敗。

不過,我可以肯定地確認,我可以加載mod_spatialite與

MyConnection.LoadExtension("mod_spatilite");