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
2013-06-04,原网站已经不存在,现在曾经更新至:http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki

ACCESS 1

Bin下发生一个测试工具,可以查看本地运行SQLITE的各类性能指标。

 

仲:新建数据库

装收尾后,打开visual
studio,新建数据连接,可以看来数据源多矣同等件SQLite。

ACCESS 2

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

ACCESS 3

 

其三:数据库维护

好当VS中者的保护SQLITE数据,如下图:

ACCESS 4

可以于VS中动用类似SQL查询分析器的功力,如下图:

ACCESS 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. 美妙注释的源代码ACCESS, 并且有着90%以上之测试覆盖率

  11. 单身: 没有额外依赖

  12. Source完全的Open, 你得用来其它用场, 包括出卖她

  13. 支撑多支付语言,C, PHP, Perl, Java, ASP .NET,Python

 

ACCESS 6微信扫一扫,关注最课程(www.zuikc.com),获取更多己之章,获取软件开发每日一练

 

 

相关文章