.net引用System.Data.SQLite操作SQLite
轉(zhuǎn)載自: https://www.cnblogs.com/jin-/p/8143457.html?
之所以要做這個筆記,是因?yàn)樵?NET中使用System.Data.SQLite的時候,遇到了些問題,這些問題是相對于引用其他dll沒有遇到過的,所以作個筆記,記錄一下。
簡單起見,首先建立一個控制臺項(xiàng)目,這肯定是.NET4.5以上的版本了,我用的是vs2017,其他版本的vs在引用System.Data.SQLite的時候有沒有問題,這個就不得而知了。
首先還是按照以往使用第三方dll文件(指是在引用管理器中搜索不到的dll)的思路,在項(xiàng)目文件夾下面建立一個文件夾dll,將System.Data.SQLite.dll放進(jìn)去(前提是保證下載的dll是正確的版本),然后
在項(xiàng)目中添加這個dll的引用。然后在項(xiàng)目的main函數(shù)中粘貼以下代碼,這里只是為了能正常使用SQLite,所以代碼設(shè)計的比較簡單,當(dāng)然代碼也是網(wǎng)上找的
SQLiteConnection conn = null; string dbPath = "Data Source =" + Environment.CurrentDirectory + "/test.db"; conn = new SQLiteConnection(dbPath);//創(chuàng)建數(shù)據(jù)庫實(shí)例,指定文件位置 conn.Open();//打開數(shù)據(jù)庫,若文件不存在會自動創(chuàng)建 string sql = "CREATE TABLE IF NOT EXISTS student(id integer, name varchar(20), sex varchar(2));";//建表語句 SQLiteCommand cmdCreateTable = new SQLiteCommand(sql, conn); cmdCreateTable.ExecuteNonQuery();//如果表不存在,創(chuàng)建數(shù)據(jù)表 SQLiteCommand cmdInsert = new SQLiteCommand(conn); cmdInsert.CommandText = "INSERT INTO student VALUES(1, '小紅', '男')";//插入幾條數(shù)據(jù) cmdInsert.ExecuteNonQuery(); cmdInsert.CommandText = "INSERT INTO student VALUES(2, '小李', '女')"; cmdInsert.ExecuteNonQuery(); cmdInsert.CommandText = "INSERT INTO student VALUES(3, '小明', '男')"; cmdInsert.ExecuteNonQuery(); conn.Close();然后開始跑程序,出現(xiàn)了第一個問題:異常來自 HRESULT:0x8007000B
網(wǎng)上搜索了一下解決方案,都說的是將項(xiàng)目屬性里面的生成里面的平臺目標(biāo)改成x86或x64。再啰嗦一句,我的電腦系統(tǒng)是Windows server 2012 r2 標(biāo)準(zhǔn)版,妥妥的64位操作系統(tǒng)。?
這里我選擇的是x86,然后繼續(xù)跑程序,結(jié)果還是出現(xiàn)剛才的問題。然后選擇x64,跑程序。好了,這回出現(xiàn)新問題了:異常來自 HRESULT:0x8007007E
根據(jù)提示,說是沒有SQLite.Interop.dll文件,于是將這個文件復(fù)制到剛才建立的dll文件夾中,并引進(jìn)項(xiàng)目,結(jié)果又出問題了。不就是引用個第三方的dll文件嗎,有必要出現(xiàn)那么多問題嗎,內(nèi)心已經(jīng)很崩潰。
這個問題,我確實(shí)沒辦法了,網(wǎng)上也找不到合適的解決方案(主要是有些解決辦法太麻煩,看都懶得看了)。怎么辦呢,遇到問題總要解決吧,作為一個專業(yè)的程序員,碼農(nóng),遇到問題必須有探索的精神,
不能指望領(lǐng)導(dǎo),不能指望同事,想想自己還沒賺到足夠的錢,娶到白富美,走上人生的巔峰,想想家里的父母.......開始胡思亂想了。想著想著,無意中打開了項(xiàng)目的bin文件夾里面的Debug文件夾,哎喲我
去,發(fā)現(xiàn)了新大陸了,這個dll怎么出現(xiàn)在這里,我明明是放在dll文件夾里面的。再想到剛才的錯誤不是說沒有SQLite.Interop.dll文件嗎,那我把SQLite.Interop.dll文件也放到這里看看
再跑程序,哎喲我去,奇跡出現(xiàn)了,程序跑起來了,成功了,debug文件夾下,出現(xiàn)了test.db文件了,這不就是夢中情人白富美嗎,總算出現(xiàn)了。
?
?
為了驗(yàn)證一下是否真的把數(shù)據(jù)寫進(jìn)去了,我簡單些了個查詢函數(shù)看了一下,果然沒問題
?
?總結(jié):1、下載正確版本的SQLite,主要是32位還是64位
2、將SQLite.Interop.dll和System.Data.SQLite.dll放到bin文件夾的debug文件夾下,然后只需引用System.Data.SQLite.dll就好
? ? 3、將項(xiàng)目屬性里面的生成里面的平臺目標(biāo)改成x64,當(dāng)然這是因?yàn)槲译娔X是64位的,如果是32位電腦也許不用這步操作了。
?
一般來說,這樣的對數(shù)據(jù)庫的操作的代碼,都是寫在類庫里面的,這里就有個地方需要注意了,在編寫對SQLite使用的類庫的時候,在類庫中只需引用System.Data.SQLite.dll,文件放在什么地方無所謂,
只要能引用就行,然后編譯通過后,在引用這個類庫的項(xiàng)目里面,記得將SQLite.Interop.dll放到bin文件夾下面的debug文件夾,而且引用的項(xiàng)目的屬性里面的平臺目標(biāo)記得改成x64。而類庫沒有這個要求。
總結(jié)
以上是生活随笔為你收集整理的.net引用System.Data.SQLite操作SQLite的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mybaits十七:使用foreach标
- 下一篇: xml的验证模式