背景:
c#編寫sql語句插入的sqlite本地數(shù)據(jù)庫的時候藐窄,遇到database is locked。
解決方案:
1、首先懷疑是否插入的格式不正確,一開始編寫的是 insert into tablename values(?,?,?,?)谜喊,嘗試更換其他格式,在sqlite軟件執(zhí)行倦始,可以正確插入斗遏,但是在c#中,還是會遇到database is locked鞋邑。
2诵次、懷疑是否哪里沒有關(guān)閉資源,最后經(jīng)過多次排查枚碗,發(fā)現(xiàn)是一個SqliteDataReader讀取完之后逾一,沒有進行關(guān)閉,但是這個reader是寫在using的語句中肮雨,猜測應(yīng)該用完遵堵,垃圾回收器會進行回收。但是實際是沒有怨规,導(dǎo)致數(shù)據(jù)庫一直被占用著鄙早,產(chǎn)生了這個錯誤。后面只需要在reader加上close方法椅亚,即可正常插入限番。
注意:
1、舊版本的sqlite可能存在開啟一個SqliteConnection呀舔,SqliteDataReader都是需要手動關(guān)閉弥虐,執(zhí)行Close方法。
2媚赖、最好都是使用using語句進行相關(guān)的資源操作霜瘪。
相關(guān)環(huán)境:
圖1
圖2