国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#中使用SQLite數據庫簡介(下)

2019-11-17 02:52:21
字體:
來源:轉載
供稿:網友
C#中使用SQLite數據庫簡介(下)

【SQLite管理工具簡介】

推薦以下2款:

Navicat for SQLite:功能非常強大,幾乎包含了數據庫管理工具的所有必需功能,操作簡單,容易上手。唯一的缺點是不能打開由System.Data.SQLite.dll加密過的數據庫。

Database.Net:臺灣人用.net開發的全能數據庫管理工具,可以管理多種數據庫,包括MSSQL、MySQL、IBM DB2、OracleaccessExcel、OleDb、Odbc等十多種數據庫(或數據接口),功能沒有Navicat那么多,只包含最基本功能。對SQLite而言,Database.Net最大的優點是支持打開由System.Data.SQLite.dll加密過的數據庫,且可以隨時對數據庫設置密碼,是.net下開發SQLite必備的小工具。下載地址:http://fishcodelib.com/Database.htm

建議以Navicat for SQLite為主,Database.Net為輔,只要涉及到數據庫加密時才用后者。

【操作SQLite實例】

操作SQlite的方法基本同其他數據庫相同,但有一些區別:

『例1』整數似乎都是Int64的。

查詢出網站App_Data目錄下“省市.db”數據庫中city表的總記錄數

[csharp]view plaincopy
  1. SQLiteConnectioncn=newSQLiteConnection("DataSource=|DataDirectory|省市.db;Version=3");
  2. SQLiteCommandcmd=newSQLiteCommand("selectcount(*)fromcity",cn);
  3. cn.Open();
  4. intrecordCount=(int)(Int64)cmd.ExecuteScalar();
  5. cn.Close();
  6. Response.Write(recordCount);

SQLite中count函數返回的是一個Int64的整數,這一點同MSSQL、Access等不同。實際上,經過有限的使用發現,似乎所有INTEGER字段的返回值都是Int64,這一點未經過有效證實。ExecuteScalar方法返回一個object實例,按照C#規定,拆箱時進行標準轉換,必須轉換成該object實例實際存儲的格式,因此分兩步,先轉換成Int64,再轉換成int。當然用.net中某些高級轉換器如Convert.ToInt32方法只要一步就可以了。

『例2』批量增刪改時需要用事務,否則效率很低。

批量插入1000條記錄,每條記錄只有簡單的id、name、passWord三個字段:

[csharp]view plaincopy
  1. SQLiteConnectioncn=newSQLiteConnection("DataSource=c://測試.db3;Version=3;password=12345");
  2. SQLiteCommandcmd=newSQLiteCommand("selectcount(*)fromtest",cn);
  3. cn.Open();
  4. intrecordCount=(int)(Int64)cmd.ExecuteScalar();
  5. Response.Write("當前的總記錄數:"+recordCount+"<br/>");
  6. for(inti=0;i<1000;i++)
  7. {
  8. cmd.CommandText="insertintotestvalues(@id,@name,@password)";
  9. cmd.Parameters.AddWithValue("@id",i);
  10. cmd.Parameters.AddWithValue("@name","姓名"+i);
  11. cmd.Parameters.AddWithValue("@password",(i*2).ToString());
  12. cmd.ExecuteNonQuery();
  13. }
  14. cmd.CommandText="selectcount(*)fromtest";
  15. recordCount=(int)(Int64)cmd.ExecuteScalar();
  16. cn.Close();
  17. Response.Write("當前的總記錄數:"+recordCount+"<br/>");

經過測試,這段代碼中的for循環花費了70000~90000毫秒,一分鐘多!

改用事務執行:

[csharp]view plaincopy
  1. SQLiteConnectioncn=newSQLiteConnection("DataSource=c://測試.db3;Version=3;password=12345");
  2. SQLiteCommandcmd=newSQLiteCommand("selectcount(*)fromtest",cn);
  3. cn.Open();
  4. intrecordCount=(int)(Int64)cmd.ExecuteScalar();
  5. Response.Write("當前的總記錄數:"+recordCount+"<br/>");
  6. SQLiteTransactiontran=cn.BeginTransaction();
  7. cmd.Transaction=tran;
  8. try
  9. {
  10. for(inti=0;i<1000;i++)
  11. {
  12. cmd.CommandText="insertintotestvalues(@id,@name,@password)";
  13. cmd.Parameters.AddWithValue("@id",i);
  14. cmd.Parameters.AddWithValue("@name","姓名"+i);
  15. cmd.Parameters.AddWithValue("@password",(i*2).ToString());
  16. cmd.ExecuteNonQuery();
  17. }
  18. tran.Commit();
  19. }
  20. catch
  21. {
  22. tran.Rollback();
  23. Response.Write("執行出錯!");
  24. }
  25. finally
  26. {
  27. cmd.CommandText="selectcount(*)fromtest";
  28. recordCount=(int)(Int64)cmd.ExecuteScalar();
  29. cn.Close();
  30. Response.Write("當前的總記錄數:"+recordCount+"<br/>");
  31. }

經過測試,這段代碼中的try部分只用了100~150毫秒!開啟事務后,效率非常高!

『例3』一般開發中可以編寫自己的數據庫通用操作類,進一步封裝ADO.NET。

如上面用事務操作的代碼,改用數據庫通用操作類后:

[csharp]view plaincopy
  1. SQLiteDatamd=newSQLiteData("DataSource=c://測試.db3;Version=3;password=12345");
  2. intrecordCount=(int)(Int64)md.ExecuteScalar("selectcount(*)fromtest");
  3. Response.Write("當前的總記錄數:"+recordCount+"<br/>");
  4. md.CreateTransaction();
  5. try
  6. {
  7. for(inti=0;i<1000;i++)
  8. md.ExecuteNonQuery("insertintotestvalues(@id,@name,@password)","@id",i,"@name","姓名"+i,"@password",(i*2).ToString());
  9. md.CommitTransaction();
  10. }
  11. catch
  12. {
  13. md.RollBack();
  14. Response.Write("執行出錯!");
  15. }
  16. finally
  17. {
  18. recordCount=(int)(Int64)md.ExecuteScalar("selectcount(*)fromtest");
  19. md.Close();
  20. Response.Write("當前的總記錄數:"+recordCount+"<br/>");
  21. }

可以看到代碼精簡了很多。

【SQLite相關有用的鏈接地址】

SQLite官方網站:http://www.sqlite.org/

SQLite內置核心函數參考文檔:http://www.sqlite.org/lang_corefunc.html

SQLite日期時間函數參考文檔:http://www.sqlite.org/lang_datefunc.html

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 珠海市| 凤城市| 安康市| 黎城县| 阜平县| 达尔| 舞阳县| 赞皇县| 原阳县| 龙游县| 渭源县| 突泉县| 喀喇沁旗| 贺州市| 平武县| 红河县| 西乡县| 仁布县| 徐闻县| 韶关市| 城步| 阳西县| 宁城县| 承德县| 桃江县| 锦州市| 南召县| 九江县| 灵川县| 安平县| 阜阳市| 广东省| 松江区| 绥滨县| 怀宁县| 昌黎县| 永和县| 武鸣县| 都匀市| 和政县| 呈贡县|