C#數據本地存儲方案之SQLite

作者: luminji  來源: 博客園  發布時間: 2010-12-20 22:36  閱讀: 2468 次  推薦: 0   原文鏈接   [收藏]  
摘要:今天我們將討論的是C#中數據本地存儲方案之SQLite,這一方案較之前的Access方案有更多的好處。

  即使是做網絡應用,在斷線情況下,也需要考慮數據的本地存儲。在SQLite出現之前,數據量大的情況下,我們一直使用ACCESS,數據量小,則文件存儲。ACCESS不支持事務原子性,在斷電情況下(這種情況總是會發生)會導致數據很難恢復。

  一:安裝

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

clip_image002

  Bin下有一個測試工具,可以查看本地運行SQLITE的各項性能指標。

  二:新建數據庫

  安裝完畢后,打開visual studio,新建數據連接,可以看到數據源多了一項SQLite。

clip_image004

  新建連接,如下圖。SQLITE的數據庫,保存后是一個文件。

clip_image006

  三:數據庫維護

  可以在VS中方面的維護SQLITE數據,如下圖:

clip_image008

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

clip_image010

  四:混合模式

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

  System.Data.SQLite

  System.Data.SQLite.Linq

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

 
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>

  五:SQLiteHelper

  最后,提供一個自己寫的SQLiteHelper:

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SQLite;
using System.Data;
using System.Data.Common;

namespace Com.Luminji.DataService.SQLHelpers
{

public class SQLiteHelper
{

/// <summary>
/// ConnectionString樣例:Datasource=Test.db3;Pooling=true;FailIfMissing=false
/// </summary>
public static string ConnectionString { get; set; }

private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p)
{

if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Parameters.Clear();
cmd.Connection
= conn;
cmd.CommandText
= cmdText;
cmd.CommandType
= CommandType.Text;
cmd.CommandTimeout
= 30;
if (p != null)
{

foreach (object parm in p)
cmd.Parameters.AddWithValue(
string.Empty, parm);
}
}


public static DataSet ExecuteQuery(string cmdText, params object[] p)
{

using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{

using (SQLiteCommand command = new SQLiteCommand())
{
DataSet ds
= new DataSet();
PrepareCommand(command, conn, cmdText, p);
SQLiteDataAdapter da
= new SQLiteDataAdapter(command);
da.Fill(ds);

return ds;
}
}
}


public static int ExecuteNonQuery(string cmdText, params object[] p)
{

using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{

using (SQLiteCommand command = new SQLiteCommand())
{
PrepareCommand(command, conn, cmdText, p);

return command.ExecuteNonQuery();
}
}
}


public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p)
{

using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{

using (SQLiteCommand command = new SQLiteCommand())
{
PrepareCommand(command, conn, cmdText, p);

return command.ExecuteReader(CommandBehavior.CloseConnection);
}
}
}


public static object ExecuteScalar(string cmdText, params object[] p)
{

using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{

using (SQLiteCommand command = new SQLiteCommand())
{
PrepareCommand(command, conn, cmdText, p);

return command.ExecuteScalar();
}
}
}

}
}
  六:附注
  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
0
0
 
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()