即使是做網絡應用,在斷線情況下,也需要考慮數據的本地存儲。在SQLite出現之前,數據量大的情況下,我們一直使用ACCESS,數據量小,則文件存儲。ACCESS不支持事務原子性,在斷電情況下(這種情況總是會發生)會導致數據很難恢復。
一:安裝
SQLITE,是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統。我直接使用的是 http://sqlite.phxsoftware.com/ (An open source ADO.NET provider for the SQLite database engine)。下載完畢是一個EXE,安裝后根目錄如下:
Bin下有一個測試工具,可以查看本地運行SQLITE的各項性能指標。
二:新建數據庫
安裝完畢后,打開visual studio,新建數據連接,可以看到數據源多了一項SQLite。
新建連接,如下圖。SQLITE的數據庫,保存后是一個文件。
三:數據庫維護
可以在VS中方面的維護SQLITE數據,如下圖:
可以在VS中使用類似SQL查詢分析器的功能,如下圖:
四:混合模式
安裝完畢,可以直接在項目集的引用中,多了
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樣例:Data Source=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(); } } } } }
本文出處:
http://www.cnblogs.com/luminji/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
