麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 綜合 > 正文

C#調用SQlite常見問題匯總

2024-07-21 02:52:18
字體:
來源:轉載
供稿:網友

最近在做SQLite開發,開發環境是VS2010+ SQLite Ado.Net data PRovider。這套Data Provider程序是基于System.Data.SQLite 1.0.66版本,下面就總結一下開發SQLite過程中的經驗。

1.管理工具(Navicat)

sqlite的管理工具很多,我比較喜歡用Navicat。個人建議用Navicat。

2.數據庫清理(VACUUM)

當數據庫中的一個或多個數據表存在大量的插入、更新和刪除等操作時,將會有大量的磁盤空間被已刪除的數據所占用。在沒有執行VACUUM命令之前,SQLite并沒有將它們歸還于操作系統。由于該類數據表中的數據存儲非常分散,因此在查詢時,無法得到更好的批量IO讀取效果,從而影響了查詢效率。可以使用VACUUM的方法對sqlite數據庫進行清理。 VACUUM命令在完成數據清理時采用了和PostgreSQL相同的策略,即創建一個和當前數據庫文件相同大小的新數據庫文件,之后再將該數據庫文件中的數據有組織的導入到新文件中,其中已經刪除的數據塊將不會被導入,在完成導入后,收縮新數據庫文件的尺寸到適當的大小。在SQLite中,僅支持清理當前連接中的主數據庫,而不能清理其它Attached數據庫。
SQLiteConnection sqlconn = new SQLiteConnection(@"Data Source=C:/cache;Version=3;PassWord=123");sqlconn.Open();SQLiteCommand sqlCom = sqlconn.CreateCommand();sqlCom.CommandText = "VACUUM";sqlCom.ExecuteNonQuery();

3.非空類型(Nullable<long>)

 SQLite中的列映射到實體對象屬性時,默認是Nullabe型的。而Nullable型數據開發比較麻煩,為了避免這個問題,可在數據庫中將列設置為非空。

4.外鍵的Delete Cascade不起作用

產生這個問題主要有兩個原因,有可能是在edmx中cascade設置沒被創建,也有可能是程序運行時數據庫對象沒加載到內存。

使用SQLite Ado.Net data Provider的Designer工具導入*.db文件時,外鍵的Cascade信息沒能正確導入,這個可能是Provider的BUG。這時需要在edmx編輯界面手動進行修改。在*.edmx窗口選擇連接線,在Property窗口手動修改End1 OnDelete屬性為Cascade。就算在edmx中設置正確,還是會發現cascade有時生效,有時不生效。這時因為如果*.db庫中的數據如果沒加載進內存,cascade就不生效。因此,如果希望cascade生效,還要將關聯的表手動加載(有點像Hibernate的懶加載機制)。這時t1表中的一行刪除時,t11表中的相關數據才會跟著被刪除,代碼如下。但是這樣也造成了SQLite性能的下降,具體還要根據業務需求來進行取舍。
if(!t1.t11.IsLoaded)    t1.t11.Load();

5.程序部署報錯

因為SQLite Ado.Net data Provider會將常用dll注冊到GAC,所以在本機運行時一般不會有問題,但是部署到別的機器就會報錯。這時需要做三個操作:

拷貝引用庫。將System.Data.SQLite.dll、System.Data.SQLite.Linq.dll等幾個相關dll拷貝到應用程序目錄下。在*.exe.config中,將connection stirng從絕對路徑改為相對路徑。在*.exe.config中,添加引用配置信息。復制代碼
<?xml version="1.0" encoding="utf-8"?><configuration>  <system.data>    <DbProviderFactories>      <remove invariant="System.Data.SQLite"/>      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />    </DbProviderFactories>  </system.data>  <connectionStrings>    <add name="DTMEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SQLite;provider connection string=&quot;data source=DTM.db&quot;" providerName="System.Data.EntityClient" />  </connectionStrings></configuration>
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产亚洲高清视频 | 一级黄色免费观看 | 在线成人免费视频 | 国语自产免费精品视频在 | 亚洲成人在线视频网 | 日韩黄色在线播放 | 黑人日比视频 | 国产精品久久在线观看 | 亚洲福利在线免费观看 | 免费一级欧美大片视频 | 空姐一级毛片 | 国产精品久久久久久久久久iiiii | 九九精品在线播放 | 欧美日韩在线视频一区 | 免费男女视频 | 欧美巨乳在线观看 | 最近国产中文字幕 | 国产精品久久久久久久久久10秀 | 羞羞的动漫在线观看 | 欧美精品免费一区二区三区 | 久久艹逼| 欧美日本在线播放 | 色人阁在线视频 | 91短视频版高清在线观看免费 | 欧美一区二区精品夜夜嗨 | 成人在线视频国产 | 欧美精品一区二区三区在线 | 草b视频在线观看 | 欧美黄色免费视频 | 欧美日韩亚洲成人 | 搜一级毛片 | 日本在线看片 | 天天鲁在线视频免费观看 | 一区国产精品 | 久久综合久久综合久久 | 久久久久久亚洲综合影院红桃 | 久久久成人免费视频 | 国产资源在线观看 | 亚洲国产女同久久 | 精品国产一区二区三区四 | 一级电影中文字幕 |