自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#中數(shù)據(jù)本地存儲(chǔ)方案之SQLite

開(kāi)發(fā) 后端
今天我們將討論的是C#中數(shù)據(jù)本地存儲(chǔ)方案之SQLite,這一方案較之前的Access方案有更多的好處。

即使是做網(wǎng)絡(luò)應(yīng)用,在斷線情況下,也需要考慮數(shù)據(jù)的本地存儲(chǔ)。在SQLite出現(xiàn)之前,數(shù)據(jù)量大的情況下,我們一直使用ACCESS,數(shù)據(jù)量小,則文件存儲(chǔ)。ACCESS不支持事務(wù)原子性,在斷電情況下(這種情況總是會(huì)發(fā)生)會(huì)導(dǎo)致數(shù)據(jù)很難恢復(fù)。

一:安裝

SQLITE,是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫(kù)管理系統(tǒng)。我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.NET provider for the SQLite database engine)。下載完畢是一個(gè)EXE,安裝后根目錄如下:

clip_image002

Bin下有一個(gè)測(cè)試工具,可以查看本地運(yùn)行SQLITE的各項(xiàng)性能指標(biāo)。

二:新建數(shù)據(jù)庫(kù)

安裝完畢后,打開(kāi)visual studio,新建數(shù)據(jù)連接,可以看到數(shù)據(jù)源多了一項(xiàng)SQLite。

clip_image004

新建連接,如下圖。SQLITE的數(shù)據(jù)庫(kù),保存后是一個(gè)文件。

clip_image006

三:數(shù)據(jù)庫(kù)維護(hù)

可以在Visual Studio中方面的維護(hù)SQLITE數(shù)據(jù),如下圖:

clip_image008

可以在Visual Studio中使用類似SQL查詢分析器的功能,如下圖:

clip_image010

四:混合模式

安裝完畢,可以直接在項(xiàng)目集的引用中,多了

System.Data.SQLite

System.Data.SQLite.Linq

兩個(gè)程序集,由于http://sqlite.phxsoftware.com/的System.Data.SQLite是混合模式程序集,是針對(duì)“v2.0.50727”版的運(yùn)行時(shí)生成的,在沒(méi)有配置其他信息的情況下,無(wú)法在 4.0 運(yùn)行時(shí)中加載該程序集。故需要在App.config中配置如下參數(shù)。

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <configuration> 
  3.   <startup useLegacyV2RuntimeActivationPolicy="true"> 
  4.     <supportedRuntime version="v4.0"/> 
  5.   </startup> 
  6. </configuration> 

五:SQLiteHelper

最后,提供一個(gè)自己寫(xiě)的SQLiteHelper:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data.SQLite;  
  6. using System.Data;  
  7. using System.Data.Common;  
  8.  
  9. namespace Com.Luminji.DataService.SQLHelpers  
  10. {  
  11.     public class SQLiteHelper  
  12.     {  
  13.         /// <summary>  
  14.         /// ConnectionString樣例:Datasource=Test.db3;Pooling=true;FailIfMissing=false  
  15.         /// </summary>  
  16.         public static string ConnectionString { getset; }  
  17.  
  18.         private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p)  
  19.         {  
  20.             if (conn.State != ConnectionState.Open)  
  21.                 conn.Open();  
  22.             cmd.Parameters.Clear();  
  23.             cmd.Connection = conn;  
  24.             cmd.CommandText = cmdText;  
  25.             cmd.CommandType = CommandType.Text;  
  26.             cmd.CommandTimeout = 30;  
  27.             if (p != null)  
  28.             {  
  29.                 foreach (object parm in p)  
  30.                     cmd.Parameters.AddWithValue(string.Empty, parm);  
  31.             }  
  32.         }  
  33.  
  34.         public static DataSet ExecuteQuery(string cmdText, params object[] p)  
  35.         {  
  36.             using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  37.             {  
  38.                 using (SQLiteCommand command = new SQLiteCommand())  
  39.                 {  
  40.                     DataSet ds = new DataSet();  
  41.                     PrepareCommand(command, conn, cmdText, p);  
  42.                     SQLiteDataAdapter da = new SQLiteDataAdapter(command);  
  43.                     da.Fill(ds);  
  44.                     return ds;  
  45.                 }  
  46.             }  
  47.         }  
  48.  
  49.         public static int ExecuteNonQuery(string cmdText, params object[] p)  
  50.         {  
  51.             using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  52.             {  
  53.                 using (SQLiteCommand command = new SQLiteCommand())  
  54.                 {  
  55.                     PrepareCommand(command, conn, cmdText, p);  
  56.                     return command.ExecuteNonQuery();  
  57.                 }  
  58.             }  
  59.         }  
  60.  
  61.         public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p)  
  62.         {  
  63.             using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  64.             {  
  65.                 using (SQLiteCommand command = new SQLiteCommand())  
  66.                 {  
  67.                     PrepareCommand(command, conn, cmdText, p);  
  68.                     return command.ExecuteReader(CommandBehavior.CloseConnection);  
  69.                 }  
  70.             }  
  71.         }  
  72.  
  73.         public static object ExecuteScalar(string cmdText, params object[] p)  
  74.         {  
  75.             using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  76.             {  
  77.                 using (SQLiteCommand command = new SQLiteCommand())  
  78.                 {  
  79.                     PrepareCommand(command, conn, cmdText, p);  
  80.                     return command.ExecuteScalar();  
  81.                 }  
  82.             }  
  83.         }  
  84.  
  85.     }  

六:附注

SQLite官方網(wǎng)站: http://www.sqlite. org/ 時(shí)第一眼看到關(guān)于SQLite的特性。

1. ACID事務(wù)

2. 零配置 – 無(wú)需安裝和管理配置

3. 儲(chǔ)存在單一磁盤(pán)文件中的一個(gè)完整的數(shù)據(jù)庫(kù)

4. 數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由的共享

5. 支持?jǐn)?shù)據(jù)庫(kù)大小至2TB

6. 足夠小, 大致3萬(wàn)行C代碼, 250K

7. 比一些流行的數(shù)據(jù)庫(kù)在大部分普通數(shù)據(jù)庫(kù)操作要快

8. 簡(jiǎn)單, 輕松的API

9. 包含TCL綁定, 同時(shí)通過(guò)Wrapper支持其他語(yǔ)言的綁定

10. 良好注釋的源代碼, 并且有著90%以上的測(cè)試覆蓋率

11. 獨(dú)立: 沒(méi)有額外依賴

12. Source完全的Open, 你可以用于任何用途, 包括出售它

13. 支持多種開(kāi)發(fā)語(yǔ)言,C, PHP, Perl, Java, ASP .NET,Python

原文鏈接:http://www.cnblogs.com/luminji/archive/2010/12/19/1910396.html

【編輯推薦】

  1. C#取整函數(shù)實(shí)例應(yīng)用詳解
  2. C#單元測(cè)試的一個(gè)小故事
  3. C#單元測(cè)試概念及作用的淺析
  4. C#單元測(cè)試使用的必要性的淺析
  5. C#單元測(cè)試的運(yùn)行淺析
責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2024-09-20 18:02:42

C#數(shù)據(jù)庫(kù)SQLite

2024-05-06 06:00:00

C#文件存儲(chǔ)

2018-07-13 09:20:30

SQLite數(shù)據(jù)庫(kù)存儲(chǔ)

2025-02-06 08:06:05

2025-02-27 08:15:28

2024-02-28 08:06:17

2022-06-01 07:33:29

數(shù)據(jù)存儲(chǔ)加密

2022-12-29 08:57:34

Android本地?cái)?shù)據(jù)存儲(chǔ)

2009-08-25 17:59:49

C#入門

2011-07-06 11:04:42

C#正則表達(dá)式

2012-12-24 09:14:31

ios

2009-08-17 13:49:20

C#中調(diào)用Window

2009-09-04 14:01:30

C#存儲(chǔ)BLOB對(duì)象

2009-08-13 17:58:34

C#存儲(chǔ)過(guò)程

2009-08-25 16:32:24

C#語(yǔ)言

2021-03-15 08:18:23

C#反射模塊

2009-08-25 16:29:33

C#使用sqlserv

2009-08-12 18:35:17

C#數(shù)據(jù)結(jié)構(gòu)

2024-01-02 13:26:39

TLSC#線程

2011-05-18 10:21:53

SQLite
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)