我正在開發一個使用SQLite3數據庫並需要在Windows和Linux之間交叉兼容的C#項目。在Mono上運行Sqlite
Linux服務器正在使用版本3.2.8,我正在使用Managed Sqlite Library DLL 1.0.66.0。
我抄DLL到服務器和當我運行單myexec.exe它顯示以下錯誤
未處理的異常:System.EntryPointNotFoundException: sqlite3_open_v2在(包裝管理到本機) System.Data.SQLite.UnsafeNativeMethods:sqlite3_open_v2 (字節[],IntPtr的&,整型,IntPtr的)在System.Data.SQLite.SQLite3.Open (System.String strFilename,SQLiteOpenFlagsEnum標誌的Int32 maxPoolSize,布爾usePool) 0x00000] in:0 at System.Data.SQLite.SQLiteConnection.Open() [0x00000]中:0在AudioManagement.DatabaseConnection..ctor()[0x00000] 在:0在 LinuxAudioManager.Configure.startConfiguration()[0x00000]在 :0在LinuxAudioManager.Program.Main (System.String [ ] args)[0x00000] in:0
當它試圖創建數據庫文件或打開連接時會引發此錯誤,我不確定它是哪一個。
下面是我用的,爲了創建連接
conn = new SQLiteConnection("Data Source=database.db");
conn.Open()
感謝您的幫助,您可以提供的代碼。
UPDATE 我剛剛用單聲道記錄執行了我的程序,發現了一些相當奇怪的東西。它似乎有加載lib文件的問題。輸出低於
Mono-INFO:DllImport試圖加載:'libsqlite3.so.0'。 Mono-INFO:
DllImport加載位置:'libsqlite3.so.0.so'。單INFO:的DllImport
加載庫:「libsqlite3.so.0.so:無法打開共享對象
文件:沒有這樣的文件或目錄」。 Mono-INFO:DllImport loading
庫:'./libsqlite3.so.0.so'。單信息:錯誤的DllImport裝載
庫「./libsqlite3.so.0.so:無法打開共享對象文件:沒有這樣的
文件或目錄」。單聲道INFO:DllImport加載:'libsqlite3.so.0'。
單聲道信息:搜索'sqlite3_open_v2'。 Mono-INFO:探測
'sqlite3_open_v2'。 Mono-INFO:探測'sqlite3_open_v2'。單聲道信息:
探測'sqlite3_open_v2A'。 Mono-INFO:探測'sqlite3_open_v2A'。
Mono-INFO:DllImport試圖加載:'libsqlite3.so.0'。 Mono-INFO:
DllImport加載位置:'libsqlite3.so.0.so'。單INFO:的DllImport
加載庫:「libsqlite3.so.0.so:無法打開共享對象
文件:沒有這樣的文件或目錄」。 Mono-INFO:DllImport loading
庫:'./libsqlite3.so.0.so'。單信息:錯誤的DllImport裝載
庫「./libsqlite3.so.0.so:無法打開共享對象文件:沒有這樣的
文件或目錄」。單聲道INFO:DllImport加載:'libsqlite3.so.0'。
單聲道信息:搜索'sqlite3_open_v2'。 Mono-INFO:探測
'sqlite3_open_v2'。 Mono-INFO:探測'sqlite3_open_v2'。單聲道信息:
探測'sqlite3_open_v2A'。 Mono-INFO:探測'sqlite3_open_v2A'。
文件libsqlite3.so.0確實存在,但我不明白爲什麼mono會嘗試加載 libsqlite3.so.0.so。
更新2 我認爲第一個更新的錯誤消息是指向我在錯誤的方向,因爲我已經創建了一個符號鏈接來匹配它找不到LIB文件和單不再說這couldn」加載一些東西。但是原來的EntryPointNotFoundException仍顯示
更新3 感謝@bryanmac我已經改變使用Mono.Data.Sqlite DLL,而不是其下單在Linux上正常工作的代碼。但是,在Windows中使用此DLL現在不再有效。 VS2010將建立它沒有問題,但是當我試着執行它時它會顯示錯誤
無法加載DLL「sqlite3的」:指定的模塊找不到
我下載了一個sqlite3的.exe二進制從sqlite網站和可執行文件到我的程序的可執行文件,但我的程序仍然在Windows上顯示錯誤消息。
您是否在Windows上試過Mono以查看它是否有效? – bryanmac 2012-01-11 18:21:19
http://code.google.com/p/csharp-sqlite/切換到C#SQLite,你會忘記這些原生的混亂。但是,此C#端口確實存在一些已知問題(請查看問題頁面)。 – 2012-05-03 03:01:28