1. 程式人生 > >C# SQLite資料本地儲存方案

C# SQLite資料本地儲存方案

即使是做網路應用,在斷線情況下,也需要考慮資料的本地儲存。在SQLite出現之前,資料量大的情況下,我們一直使用ACCESS,資料量小,則檔案儲存。ACCESS不支援事務原子性,在斷電情況下(這種情況總是會發生)會導致資料很難恢復。powered by 25175.net

一:安裝

SQLITE,是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統。我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.net provider for the SQLite database engine)。下載完畢是一個EXE,安裝後根目錄如下:

clip_image002498)this.width=498;" border=0>

Bin下有一個測試工具,可以檢視本地執行SQLITE的各項效能指標。

二:新建資料庫

安裝完畢後,開啟visual studio,新建資料連線,可以看到資料來源多了一項SQLite。

clip_image004498)this.width=498;" border=0>

新建連線,如下圖。SQLITE的資料庫,儲存後是一個檔案。

clip_image006498)this.width=498;" border=0>

三:資料庫維護

可以在Visual Studio中方面的維護SQLITE資料,如下圖:

clip_image008498)this.width=498;" border=0>

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

clip_image010498)this.width=498;" border=0>

四:混合模式

安裝完畢,可以直接在專案集的引用中,多了

System.Data.SQLite

System.Data.SQLite.Linq

兩個程式集,由於http://sqlite.phxsoftware.com/的System.Data.SQLite是混合模式程式集,是針對“v2.0.50727”版的執行時生成的,在沒有配置其他資訊的情況下,無法在 4.0 執行時中載入該程式集。故需要在App.config中配置如下引數。

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <configuration
    >
  3. <startupuseLegacyV2RuntimeActivationPolicy="true">
  4. <supportedRuntimeversion="v4.0"/>
  5. </startup>
  6. </configuration>

五:SQLiteHelper

最後,提供一個自己寫的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. namespace Com.Luminji.DataService.SQLHelpers  
  9. {  
  10. publicclass SQLiteHelper  
  11.     {  
  12. /// <summary>
  13. /// ConnectionString樣例:Datasource=Test.db3;Pooling=true;FailIfMissing=false
  14. /// </summary>
  15. publicstaticstring ConnectionString { getset; }  
  16. privatestaticvoid PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, paramsobject[] p)  
  17.         {  
  18. if (conn.State != ConnectionState.Open)  
  19.                 conn.Open();  
  20.             cmd.Parameters.Clear();  
  21.             cmd.Connection = conn;  
  22.             cmd.CommandText = cmdText;  
  23.             cmd.CommandType = CommandType.Text;  
  24.             cmd.CommandTimeout = 30;  
  25. if (p != null)  
  26.             {  
  27. foreach (object parm in p)  
  28.                     cmd.Parameters.AddWithValue(string.Empty, parm);  
  29.             }  
  30.         }  
  31. publicstatic DataSet ExecuteQuery(string cmdText, paramsobject[] p)  
  32.         {  
  33. using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  34.             {  
  35. using (SQLiteCommand command = new SQLiteCommand())  
  36.                 {  
  37.                     DataSet ds = new DataSet();  
  38.                     PrepareCommand(command, conn, cmdText, p);  
  39.                     SQLiteDataAdapter da = new SQLiteDataAdapter(command);  
  40.                     da.Fill(ds);  
  41. return ds;  
  42.                 }  
  43.             }  
  44.         }  
  45. publicstaticint ExecuteNonQuery(string cmdText, paramsobject[] p)  
  46.         {  
  47. using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  48.             {  
  49. using (SQLiteCommand command = new SQLiteCommand())  
  50.                 {  
  51.                     PrepareCommand(command, conn, cmdText, p);  
  52. return command.ExecuteNonQuery();  
  53.                 }  
  54.             }  
  55.         }  
  56. publicstatic SQLiteDataReader ExecuteReader(string cmdText, paramsobject[] p)  
  57.         {  
  58. using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  59.             {  
  60. using (SQLiteCommand command = new SQLiteCommand())  
  61.                 {  
  62.                     PrepareCommand(command, conn, cmdText, p);  
  63. return command.ExecuteReader(CommandBehavior.CloseConnection);  
  64.                 }  
  65.             }  
  66.         }  
  67. publicstaticobject ExecuteScalar(string cmdText, paramsobject[] p)  
  68.         {  
  69. using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))  
  70.             {  
  71. using (SQLiteCommand command = new SQLiteCommand())  
  72.                 {  
  73.                     PrepareCommand(command, conn, cmdText, p);  
  74. return command.ExecuteScalar();  
  75.                 }  
  76.             }  
  77.         }  
  78.     }  

六:附註

SQLite官方網站: http://www.sqlite. org/ 時第一眼看到關於SQLite的特性。

1. ACID事務

2. 零配置 – 無需安裝和管理配置

3. 儲存在單一磁碟檔案中的一個完整的資料庫

4. 資料庫檔案可以在不同位元組順序的機器間自由的共享

5. 支援資料庫大小至2TB

6. 足夠小, 大致3萬行C程式碼, 250K

7. 比一些流行的資料庫在大部分普通資料庫操作要快

8. 簡單, 輕鬆的API

9. 包含TCL繫結, 同時通過Wrapper支援其他語言的繫結

10. 良好註釋的原始碼, 並且有著90%以上的測試覆蓋率

11. 獨立: 沒有額外依賴

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

13. 支援多種開發語言,C, PHP, Perl, Java, ASP .net,Python

相關推薦

C# SQLite資料本地儲存方案

即使是做網路應用,在斷線情況下,也需要考慮資料的本地儲存。在SQLite出現之前,資料量大的情況下,我們一直使用ACCESS,資料量小,則檔案儲存。ACCESS不支援事務原子性,在斷電情況下(這種情況總是會發生)會導致資料很難恢復。powered by 25175.net

C#資料本地儲存方案SQLite

即使是做網路應用,在斷線情況下,也需要考慮資料的本地儲存。在SQLite出現之前,資料量大的情況下,我們一直使用ACCESS,資料量小,則檔案儲存。ACCESS不支援事務原子性,在斷電情況下(這種情況總是會發生)會導致資料很難恢復。 一:安裝 SQLITE,是一

深入剖析SRDF/Mtreo和MetroSync雙活資料中心儲存方案

      文章有彩蛋,集中精力就會發現;十多分鐘的短片濃縮了百萬IT技術人的身影。      

CocosCreator之KUOKUO帶你做主角資料本地儲存加拖尾加攝像機緩跟隨加無限地面-四合一教程

本次引擎2.0.5 編輯工具VSCode 目標1:本地儲存 新建個工程,加個單色背景,加個標籤,加兩個按鈕(文字為‘升級’和‘儲存’): 好了,讓我們新建個指令碼綁在Canvas上 main.js 在載入時獲取資料,如果沒有,給初始值。 給兩個按鈕寫方法:

東湖行 | 優雲數智UMStor展示PB級資料儲存方案實力

在近日舉行的2018全球快閃記憶體技術峰會上,優雲數智攜旗下具有“CBA”氣息的儲存系統——UMStor來到武漢東湖之濱的光谷科技會展中心,向參會者展示PB級資料湖儲存方案實力。 資料流衝擊日益凸顯 100多年前,“千湖之地”武漢湖泊星羅棋佈,沙湖、東湖、白洋湖相通,因無

C語言資料型別儲存位置及堆疊說明

一、預備知識—程式的記憶體分配一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分1、棧區(stack)  由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2、堆區(heap)   般由程式設計師分配釋放, 若程式設計師不釋放

HTML 5 中WebStorage實現資料本地儲存

webstorage 分sessionStorage和localstorage,sessionStorage是臨時儲存,localStorage是永久儲存。 sessionStorage如果瀏覽器關閉了,資料就沒有了,而localStorage則不會。 sessionSto

資料庫SQLite 資料大量儲存 和快速讀取 連結串列查詢的優化 使用gosn

使用gson 將連結串列儲存的優化轉化: private Gson gson = new Gson(); private void readStr(){ List<Contacts

資料儲存方案

 C++中,根據資料儲存在記憶體中的時間長短,分為四種不同的方案來儲存資料。 1.自動儲存持續性 2.靜態儲存持續性 3.執行緒儲存持續性(C++11),不介紹。 4.動態儲存持續性 ——————————————————————————————————————————

HTML5+的離線本地儲存方案

HTML5+的離線本地儲存有如下多種方案:HTML5標準方案:cookie、localstorage、sessionstorage、websql、indexedDBHTML5Plus擴充套件方案:plus.storage、plus.iocookie:體量最小,可以設定過期時間

localStorage相容IE系列的本地儲存方案

1、  你知道什麼是localStorage 2、  你需要一個相容IE系列的本地儲存方案(不考慮低版本IE的請飄過或直接看二次包裝) 相容方案效果:         所有主流瀏覽器支援以下方法和屬性:         window.localStorage 的 getIt

TableStore: 海量結構化資料分層儲存方案

前言 表格儲存是阿里雲自研分散式儲存系統,可以用來儲存海量結構化、半結構化的資料。表格儲存支援高效能和容量型兩種例項型別。高效

prometheus基於influxdb的監控資料持久化儲存方案

用prometheus在線上跑了兩年了,都是用的本地磁碟做資料儲存,磁碟空間有限,當空間不足時直接刪除資料檔案。近期監控系統正式上

本地儲存動態請求的資料

儲存的時候要在wx.request中儲存; data: {         useInfo: [] }, var that = this; wx.request

egret 本地儲存資料

通過 egret.localStorage.setItem(key,value); 可以實現本地儲存資料,類似於cookie   儲存 let key:string = "data_name"; let value:string = "data_value"; egret.

Android資料儲存方案

android內建資料庫——SQLLite 概述SQLite SQLite是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入  式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能

C++檢視資料儲存大小端模式

所謂的大端模式,是指資料的低位儲存在記憶體的高地址中,而資料的高位,儲存在記憶體的低地址中; 所謂的小端模式,是指資料的低位儲存在記憶體的低地址中,而資料的高位儲存在記憶體的高地址中。 舉個例子,16bit的short型別整數0x1234,會佔用兩個大B(Byte位元組),即兩個記憶體單

C++學習筆記】三、C++的資料型別、儲存以及基本運算

本文記錄了C++中的資料型別以及基本運算,這部分是典型的每次記每次忘型別,所以烙印在此,以便用時隨時查閱。 主要參考:http://www.runoob.com/cplusplus/cpp-data-types.html 1. C++中的資料型別 (1)基本型別 C++ 為程式

HBase實戰 | 從MySQL到HBase:資料儲存方案轉型的演進

一.叢集化方案 1.MySQL應用的演化  MySQL與HBase說到最核心的點,是一種資料儲存方案。方案本身沒有對錯、沒有好壞,只有合適與否。相信多數公司都與MySQL有著不解之緣,部分學校的課程甚至直接以SQL語言作為資料庫講解。我想借自身經歷,先來談談MySQL應用的演化。

javascript本地快取方案-- 儲存物件和設定過期時間

cz-storage 解決問題 1. 前端js使用localStorage的時候只能存字串,不能儲存物件 cz-storage 可以儲存 object undefined number string 2. localStorage沒有過期時間 cz-storage 可以設定以天為單位的過期時間 安裝