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

  即使是做网络应用,在断线情况下,也需要考虑数据的本地存储。在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样例: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

时间: 2024-09-10 17:53:50

一起谈.NET技术,C#数据本地存储方案之SQLite的相关文章

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

即使是做网络应用,在断线情况下,也需要考虑数据的本地存储.在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储.ACCESS不支持事务原子性,在断电情况下(这种情况总是会发生)会导致数据很难恢复. 一:安装 SQLITE,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统.我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.NET provider for the SQLite databas

C#数“.NET研究”据本地存储方案之SQLite

即使是做网络应用,在断线情况下,也需要考虑数据的本地存储.在SQLite出现之前,数据量大的情况下,我们一直使用ACCESS,数据量小,则文件存储.ACCESS不支持事务原子性,在断电情况下(这种情况总是会发生)会导致数据很难恢复. 一:安装 SQLITE,是一款轻型的数据库,是遵守ACID的关联式数据上海网站建设库管理系统.我直接使用的是http://sqlite.phxsoftware.com/(An open source ADO.NET provider for the SQLite d

HTML5的本地存储方案LOCALSTORAGE的例子

本地存储解决方案很多,比如Flash SharedObject.Google Gears.Cookie.DOM Storage.User Data.window.name.Silverlight.Open Database等. html5的本地存储localStorage 以下是各种本地存储方案的特点: Cookie: 在web中得到广泛应用,但局限性非常明显,容量太小,有些站点会因为出于安全的考虑而禁用cookie,cookie没有想象中的那么安全,Cookie 的内容会随着页面请求一并发往服

基于加密机制的云计算数据可靠存储方案研究

基于加密机制的云计算数据可靠存储方案研究 赵莉  王魁祎 为了克服因收发双方都使用同样钥匙导致的其安全性不高等缺点,引入深度加密机制,与AES(Advanced Encryption Standard)算法耦合,设计了基于双级加密的云计算数据可靠存储方案.先采用AES对用户数据客户端进行对称加密,到达云资源管理器后,采用分布式重组的方法进行深度加密,构造了"初级-深度"双级加密的云计算数据可靠存储结构,并完成了基于加密的云计算数据安全存储加密和解密操作流程.借助Eclipse与Java

一种基于LT码的数据云存储方案

一种基于LT码的数据云存储方案 李力 鄢田云 拜占庭失效或恶意攻击会降低云服务供应商的云存储服务可靠性,为此,提出一种基于云计算的安全可靠数据存储方案.通过LT编码增加分布式云服务器的数据冗余度,在保证性能全局准最优的同时,提升数据用户在数据检索阶段的解码效率.利用支持公共数据完整性检查和准确数据修复,避免数据拥有者长期保持在线状态,并设计数据修复解决方案,使服务运行期间无需产生元数据也能进行数据修复.实验结果表明,与基于网络编码和基于RS码的云存储方案相比,该方案的通信成本只增加了15%,但数

容器技术在数据中心存储中扮演什么角色?

容器是VMworld 2015大会最为热门的话题之一.VMware很清楚地看到了近期容器与虚拟机混搭将会快速进入企业数据中心.IT组织仍旧需要捍卫安全性以及数据管理需求,即使是容器化的应用也不例外.VMware已经在虚拟机端交付了容器,而且相关设计已经取得成功,对虚拟化及云管理解决方案进行了扩展以支持(而且我认为最终会同化)企业集装箱化项目. VMware全新的vSphere集成容器(VIC)使得管理及确保运行在虚拟机(称之为虚拟容器主机)中容器的安全性几乎和管理及确保传统虚拟机的安全性没什么两

HTML5 WebStorage(HTML5本地存储技术)_CSS/HTML

WebStorage是HTML5中本地存储的解决方案之一,在HTML5的WebStorage概念引入之前除去IE User Data.Flash Cookie.Google Gears等看名字就不靠谱的解决方案,浏览器兼容的本地存储方案只有使用cookie.有同学可能会问,既然有了cookie本地存储,为什么还要引入WebStorage的概念? Cookie肿么了 cookie的缺陷是非常明显的 1. 数据大小:作为存储容器,cookie的大小限制在4KB左右这是非常坑爹的,尤其对于现在复杂的业

浪潮助山西师范大学踏上数据集中存储之旅

导读:山西师范大学将校园门户等关键应用的数据迁移到浪潮集中存储系统,提升了管理效率,增加了可靠性和可用性.这不仅意味着10多年来山师大信息化过程中积累的大量数据有了归宿,而且终于可以对以往那些由于某台设备损坏导致的数据隐患说再见了. 陷入了"头疼医头.脚疼医脚"的怪圈 作为山西省唯一省属重点师范大学,大规模硬件平台给山西师范大学各种活动提供强大支持的同时,也带来了资源利用率不足.资源调配不灵活和管理难度大等困扰. 数据集中存储改变山西师范大学信息化进程 据山西师范大学http://ww

开源IaaS ZStack本地存储使用手册

本地存储(Local Storage)是继NFS主存储.iSCSI主存储之后ZStack支持的第三类主存储.本地存储相比网络共享存储而言,更轻量.更方便(甚至在网络速度和网络存储性能不佳的情况下,本地存储的性能也更高),所以也有很多客户采用本地存储方案来搭建云系统.ZStack自v0.8.0开始支持本地存储.本教程仅会介绍如何添加本地存储来做云环境的主存储. ZStack对于本地存储的使用有如下定义: 1. 一个Cluster内的所有计算节点应该有相同的目录放本地存储. 2. 如果一个Clust