之因此要作這個筆記,是由於在.NET中使用System.Data.SQLite的時候,遇到了些問題,這些問題是相對於引用其餘dll沒有遇到過的,因此做個筆記,記錄一下。程序員
簡單起見,首先創建一個控制檯項目,這確定是.NET4.5以上的版本了,我用的是vs2017,其餘版本的vs在引用System.Data.SQLite的時候有沒有問題,這個就不得而知了。sql
首先仍是按照以往使用第三方dll文件(指是在引用管理器中搜索不到的dll)的思路,在項目文件夾下面創建一個文件夾dll,將System.Data.SQLite.dll放進去(前提是保證下載的dll是正確的版本),而後數據庫
在項目中添加這個dll的引用。而後在項目的main函數中粘貼如下代碼,這裏只是爲了能正常使用SQLite,因此代碼設計的比較簡單,固然代碼也是網上找的函數
SQLiteConnection conn = null; string dbPath = "Data Source =" + Environment.CurrentDirectory + "/test.db"; conn = new SQLiteConnection(dbPath);//建立數據庫實例,指定文件位置 conn.Open();//打開數據庫,若文件不存在會自動建立 string sql = "CREATE TABLE IF NOT EXISTS student(id integer, name varchar(20), sex varchar(2));";//建表語句 SQLiteCommand cmdCreateTable = new SQLiteCommand(sql, conn); cmdCreateTable.ExecuteNonQuery();//若是表不存在,建立數據表 SQLiteCommand cmdInsert = new SQLiteCommand(conn); cmdInsert.CommandText = "INSERT INTO student VALUES(1, '小紅', '男')";//插入幾條數據 cmdInsert.ExecuteNonQuery(); cmdInsert.CommandText = "INSERT INTO student VALUES(2, '小李', '女')"; cmdInsert.ExecuteNonQuery(); cmdInsert.CommandText = "INSERT INTO student VALUES(3, '小明', '男')"; cmdInsert.ExecuteNonQuery(); conn.Close();
而後開始跑程序,出現了第一個問題:異常來自 HRESULT:0x8007000Bspa
網上搜索了一下解決方案,都說的是將項目屬性裏面的生成裏面的平臺目標改爲x86或x64。再囉嗦一句,個人電腦系統是Windows server 2012 r2 標準版,妥妥的64位操做系統。操作系統
這裏我選擇的是x86,而後繼續跑程序,結果仍是出現剛纔的問題。而後選擇x64,跑程序。好了,這回出現新問題了:異常來自 HRESULT:0x8007007Edebug
根據提示,說是沒有SQLite.Interop.dll文件,因而將這個文件複製到剛纔創建的dll文件夾中,並引進項目,結果又出問題了。不就是引用個第三方的dll文件嗎,有必要出現那麼多問題嗎,心裏已經很崩潰。設計
這個問題,我確實沒辦法了,網上也找不到合適的解決方案(主要是有些解決辦法太麻煩,看都懶得看了)。怎麼辦呢,遇到問題總要解決吧,做爲一個專業的程序員,碼農,遇到問題必須有探索的精神,code
不能期望領導,不能期望同事,想一想本身還沒賺到足夠的錢,娶到白富美,走上人生的巔峯,想一想家裏的父母.......開始胡思亂想了。想着想着,無心中打開了項目的bin文件夾裏面的Debug文件夾,哎喲我server
去,發現了新大陸了,這個dll怎麼出如今這裏,我明明是放在dll文件夾裏面的。再想到剛纔的錯誤不是說沒有SQLite.Interop.dll文件嗎,那我把SQLite.Interop.dll文件也放到這裏看看
再跑程序,哎喲我去,奇蹟出現了,程序跑起來了,成功了,debug文件夾下,出現了test.db文件了,這不就是夢中情人白富美嗎,總算出現了。
爲了驗證一下是否真的把數據寫進去了,我簡單些了個查詢函數看了一下,果真沒問題
總結:一、下載正確版本的SQLite,主要是32位仍是64位
二、將SQLite.Interop.dll和System.Data.SQLite.dll放到bin文件夾的debug文件夾下,而後只需引用System.Data.SQLite.dll就好
三、將項目屬性裏面的生成裏面的平臺目標改爲x64,固然這是由於我電腦是64位的,若是是32位電腦也許不用這步操做了。
通常來講,這樣的對數據庫的操做的代碼,都是寫在類庫裏面的,這裏就有個地方須要注意了,在編寫對SQLite使用的類庫的時候,在類庫中只需引用System.Data.SQLite.dll,文件放在什麼地方無所謂,
只要能引用就行,而後編譯經過後,在引用這個類庫的項目裏面,記得將SQLite.Interop.dll放到bin文件夾下面的debug文件夾,並且引用的項目的屬性裏面的平臺目標記得改爲x64。而類庫沒有這個要求。