C#数据本地存储方案之SQLite

即使是做网络利用,在断线情形下,也亟需考虑数据的当地存储。在SQLite出现此前,数据量大的图景下,大家一直使用ACCESS,数据量小,则文件存储。ACCESS不扶助工作原子性,在断电景况下(这种境况总是会发生)会促成数据很难恢复生机。

 

一:安装

SQLITE,是一款轻型的数据库,是听从ACID的关联式数据库管理种类。作者直接利用的是http://sqlite.phxsoftware.com/(An
open source ADO.NET provider for the SQLite database
engine)。下载完毕是二个EXE,安装后根目录如下:

PS: UPDATED IN
二零一一-06-04,原网站已经不存在,今后一度更新到:http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

图片 1

Bin下有二个测试工具,可以查看本地运营SQLITE的种种质量目标。

 

二:新建数据库

安装完结后,打开visual
studio,新建数据连接,可以看来数据源多了一项SQLite。

图片 2

新建连接,如下图。SQLITE的数据库,保存后是二个文件。

图片 3

 

三:数据库维护

可以在VS中方面的掩护SQLITE数据,如下图:

图片 4

可以在VS中运用类似SQL查询分析器的意义,如下图:

图片 5

 

四:混合方式

设置收尾,可以一贯在品种集的引用中,多了

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();
                }
            }
        }

    }
}

 

六:附注

SQLite官方网站: http://www.sqlite. org/ 时先是眼看到有关SQLite的风味。

  1. ACID事务

  2. 零安插 – 无需安装和管制配置

  3. 储存在单一磁盘文件中的一个全体的数据库

  4. 数据库文件可以在不相同字节顺序的机器间自由的共享

  5. 匡助数据库大小至2TB

  6. 足够小, 大致3万行C代码, 250K

  7. 比部分风行的数据库在大多数常见数据库操作要快

  8. 简单, 轻松的API

  9. 含有TCL绑定, 同时经过Wrapper协助任何语言的绑定

  10. 可以注释的源代码, 并且有着9/10之上的测试覆盖率

  11. 单独: 没有额外看重

  12. Source完全的Open, 你可以用于其余用场, 包涵出卖它

  13. 支撑多样费用语言,C, PHP, Perl, Java, ASP .NET,Python

 

图片 6微信扫一扫,关怀最课程(www.zuikc.com),获取越来越多我的篇章,获取软件开发每一日一练

 

 

相关文章