• 一起谈.NET技术,C#数据本地存储方案之SQLite 狼人:


      即使是做网络应用,在断线情况下,也需要考虑数据的本地存储。在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
  • 相关阅读:
    对"对DllRegisterServer的调用失败,错误代码为0x8007005"的解决办法
    Struts FileUpload 异常处理之Processing of multipart/formdata request failed.
    Java设计模式之简单工厂模式(转载)
    [转]VS 2008 中文"试用版"变"正式版"方法
    XP系统中多用户,自动登陆(一)
    常见Flash无法播放现象处理
    [转]顺利迈出职业成功的第一步
    VS2005的BUG:Cannot convert type 'ASP.login_aspx' to 'System.Web.UI.WebControls.Login'
    OO设计原则
    ASPX页面生成HTML的方法
  • 原文地址:https://www.cnblogs.com/waw/p/2163122.html
Copyright © 2020-2023  润新知