我们在开发应用是经常会需要用到一些数据的存储,存储的方式有多种,使用数据库是一种比较受大家欢迎的方式。但是对于一些小型的应用,如一些移动APP,通常的数据库过于庞大,而轻便的SQLite则能解决这一问题。不但操作方便,而且只需要要一个文件即可,在这里我们来说一说使用C#语言操作SQLite数据库。

1、SQLite简介

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起MySQL、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

如果想了解更多关于SQLite的问题,可以访问它的官方网站:http://www.sqlite.org/

2、开始前的准备

在开始之前我们需要准备必要的开发环境,这次咱们使用的是Visual Studio 2015开发环境,但是我们开发基于SQLite的应用光有VS2015还不够。我需要到SQLite的官方网站下载并安装SQLite。

在SQLite官网找到下载,有应用于各种环境的SQLite组件及源码,我们选择Precompiled Binaries for .NET,这是应用于.NET开发环境的,点击进入会看到应用于.NET2.0直至4.6以及32位和64位平台的各个版本。我们选择Setups for 32-bit Windows (.NET Framework 4.6)下载安装即可。

3、C#操作SQLite的封装

在完成开发环境的准备之后,我们接下来实现对SQLite操作的必要封装,以进一步降低在具体应用中的使用难度。在这里我们只是封装一些常用而且必要的功能。

 public class SQLiteHelper{//创建数据库文件public static void CreateDBFile(string fileName){string path = System.Environment.CurrentDirectory + @"/Data/";if (!Directory.Exists(path)){Directory.CreateDirectory(path);}string databaseFileName = path + fileName;if (!File.Exists(databaseFileName)){SQLiteConnection.CreateFile(databaseFileName);}}//生成连接字符串private static string CreateConnectionString(){SQLiteConnectionStringBuilder connectionString = new SQLiteConnectionStringBuilder();connectionString.DataSource = @"data/ScriptHelper.db";string conStr = connectionString.ToString();return conStr;}/// <summary>/// 对插入到数据库中的空值进行处理/// </summary>/// <param name="value"></param>/// <returns></returns>public static object ToDbValue(object value){if (value == null){return DBNull.Value;}else{return value;}}/// <summary>/// 对从数据库中读取的空值进行处理/// </summary>/// <param name="value"></param>/// <returns></returns>public static object FromDbValue(object value){if (value == DBNull.Value){return null;}else{return value;}}/// <summary>/// 执行非查询的数据库操作/// </summary>/// <param name="sqlString">要执行的sql语句</param>/// <param name="parameters">参数列表</param>/// <returns>返回受影响的条数</returns>public static int ExecuteNonQuery(string sqlString, params SQLiteParameter[] parameters){string connectionString=CreateConnectionString();using (SQLiteConnection conn = new SQLiteConnection(connectionString)){conn.Open();using (SQLiteCommand cmd = conn.CreateCommand()){cmd.CommandText = sqlString;foreach (SQLiteParameter parameter in parameters){cmd.Parameters.Add(parameter);}return cmd.ExecuteNonQuery();}}}/// <summary>/// 执行查询并返回查询结果第一行第一列/// </summary>/// <param name="sqlString">SQL语句</param>/// <param name="sqlparams">参数列表</param>/// <returns></returns>public static object ExecuteScalar(string sqlString, params SQLiteParameter[] parameters){string connectionString = CreateConnectionString();using (SQLiteConnection conn = new SQLiteConnection(connectionString)){conn.Open();using (SQLiteCommand cmd = conn.CreateCommand()){cmd.CommandText = sqlString;foreach (SQLiteParameter parameter in parameters){cmd.Parameters.Add(parameter);}return cmd.ExecuteScalar();}}}/// <summary>/// 查询多条数据/// </summary>/// <param name="sqlString">SQL语句</param>/// <param name="parameters">参数列表</param>/// <returns>返回查询的数据表</returns>public static DataTable GetDataTable(string sqlString,params SQLiteParameter[] parameters){string connectionString = CreateConnectionString();using (SQLiteConnection conn = new SQLiteConnection(connectionString)){conn.Open();using (SQLiteCommand cmd = conn.CreateCommand()){cmd.CommandText = sqlString;foreach (SQLiteParameter parameter in parameters){cmd.Parameters.Add(parameter);}DataSet ds = new DataSet();SQLiteDataAdapter adapter = new SQLiteDataAdapter(cmd);adapter.Fill(ds);return ds.Tables[0];}}}}

4、应用实例

上面封装完了之后,我们就是使用上面封装的函数来实际操作SQLite数据库。对数据库的应用实例无非就是对各种对象的增、删、改、查。我没列举一个对源码类型对象的各种操作实例如下:

public class ScriptTypeDAL{public ScriptTypeM ToScriptType(DataRow row){ScriptTypeM type = new ScriptTypeM();type.ScriptTypeId = (Guid)row["ScriptTypeId"];type.ScriptType = (string)row["ScriptType"];type.IsUsing = (bool)row["IsUsing"];return type;}public void Insert(ScriptTypeM Type){SQLiteHelper.ExecuteNonQuery(@"insert into TB_ScriptType(ScriptTypeId,ScriptType,IsUsing)Values(@ScriptTypeId,@ScriptType,1)",new SQLiteParameter("ScriptTypeId", Type.ScriptTypeId),new SQLiteParameter("ScriptType", Type.ScriptType));}public void Update(ScriptTypeM Type){SQLiteHelper.ExecuteNonQuery(@"update TB_ScriptType set ScriptType=@ScriptType,IsUsing=@IsUsing where ScriptTypeId=@ScriptTypeId",new SQLiteParameter("ScriptType", Type.ScriptType),new SQLiteParameter("IsUsing", Type.IsUsing),new SQLiteParameter("ScriptTypeId", Type.ScriptTypeId));}public ScriptTypeM GetbyId(Guid id){DataTable table = SQLiteHelper.GetDataTable("select * from TB_ScriptType where ScriptTypeId=@id",new SQLiteParameter("id", id));if (table.Rows.Count <= 0){return null;}else if (table.Rows.Count > 1){throw new Exception("Id重复!");}else{return ToScriptType(table.Rows[0]);}}public ScriptTypeM GetbyName(string name){DataTable table = SQLiteHelper.GetDataTable("select * from TB_ScriptType where ScriptType=@name",new SQLiteParameter("name", name));if (table.Rows.Count <= 0){return null;}else if (table.Rows.Count > 1){throw new Exception("类型名称重复!");}else{return ToScriptType(table.Rows[0]);}}public ScriptTypeM[] ListAll(){DataTable table = SQLiteHelper.GetDataTable("select * from TB_ScriptType where IsUsing=1");ScriptTypeM[] type = new ScriptTypeM[table.Rows.Count];for (int i = 0; i < table.Rows.Count; i++){type[i] = ToScriptType(table.Rows[i]);}return type;}public ScriptTypeM[] Search(string sql, List<SQLiteParameter> parameterList){DataTable table = SQLiteHelper.GetDataTable(sql, parameterList.ToArray());ScriptTypeM[] type = new ScriptTypeM[table.Rows.Count];for (int i = 0; i < table.Rows.Count; i++){type[i] = ToScriptType(table.Rows[i]);}return type;}}

SQLite数据库小巧而且应用方便,在一些小型应用和嵌入式应用中很有优势,当然如何应用的得心应手就看个人了。

欢迎关注:

PC软件开发技术之三:C#操作SQLite数据库相关推荐

  1. PC软件开发技术之一:在WinCC中通过VBS操作SQL Server2005

    在项目中需要在一定条件满足时,保存一些数据到数据库中,并可根据条件查询.考虑到WinCC6.2以后采用的就是SQL Server2005数据库,所以直接利用该数据库即可,通过SQL Server Ma ...

  2. PC软件开发技术之二:用C#开发基于自动化接口的OPC客户端

    OPC全称是Object Linking and Embedding(OLE) for Process Control,它的出现为基于Windows的应用程序和现场过程控制应用建立了桥梁.OPC作为一 ...

  3. 点评主流软件开发技术

    为什么80%的码农都做不了架构师?>>>    点评主流软件开发技术 http://soft.chinabyte.com/297/8698297.shtml ■ 河北秦皇岛 谷俭政 ...

  4. 盘点直播直播平台软件开发技术中的编解码、直播协议、网络传输与简单实现

    盘点直播直播平台软件开发技术中的编解码.直播协议.网络传输与简单实现 编解码 视频封装格式就是我们通常所说的 .mp4,.flv,.ogv,.webm 等,它其实就是一个盒子,用来将实际的视频流以一定 ...

  5. 软件开发技术常用术语英中对照

    软件开发技术常用术语英中对照 A.I. 人工智能 A2A integration A2A整合 abstract 抽象的 abstract base class (ABC)抽象基类 abstract c ...

  6. 2021年度总结 | 葡萄城软件开发技术回顾(上)

    2021年度总结 | 葡萄城软件开发技术回顾(上) 随着冬奥会各项精彩比赛的进行,2022年的序幕逐渐被拉开. 这一年,云原生领域风起云涌,容器大规模应用,k8s可称为炙手可热的话题:这一年,大数据技 ...

  7. 传道解惑 软件开发技术名词解密

    传道解惑 软件开发技术名词解密 序:去年为了总结自己所学习/接触过的技术,也顺便为初学者少走弯路指明一些方向,可惜后来诸事缠身未能继续,十分遗憾,现放到自己的BLOG上来鼓励自己将此继续下去. &qu ...

  8. 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

  9. 从今天开始,我就要潜心研究软件开发技术了,不在被名利所困

    参加工作六年来,我一直被虚名所困,想要通过努力得到单位的认可,但是由于我是小副科,学校领导根本不放在心上,我反而为此浪费了很多宝贵的时间. 从今天开始,我就要潜心研究软件开发技术,不再在单位争名夺利了 ...

最新文章

  1. 更改ORACLE归档路径及归档模式
  2. WSAStartup()函数以及DLL的加载
  3. 【面试锦囊】14种模式搞定面试算法编程题(1-7)
  4. 【渝粤教育】国家开放大学2018年秋季 1306T社会政策 参考试题
  5. 中继承父类实现父类方法的快捷键_关于封装、继承
  6. Auto.js 全命令整理(三) 输出专题
  7. 四、CLR执行程序集中代码和IL代码简介
  8. axios请求中跨域及post请求问题解决方案
  9. 三位数除以两位数竖式计算没有余数_北京版二年级数学下册第一单元有余数的除法练习题【都有电子版】...
  10. presentModalViewController和dismissModalViewControllerAnimated的使用总结
  11. opencv怎么2个摄像头_内脏脂肪过高怎么办?从2个方法入手,坚持3个月甩掉小肚腩...
  12. 第70天-内网安全-域横向内网漫游 Socks 代理隧道技
  13. android 10 无线 电脑模式,Win10电脑和安卓手机无线互投教程
  14. web前端开发基础入门教程之HTML5 浏览器支持
  15. PR剪辑视频画面翻转缩放滑动特效转场PR预设
  16. /hv/hv_go.h:14:27: fatal error: metslib/mets.hh: No such file or director解决办法
  17. 从首届微商博览会看2015年微商的趋势
  18. 科猫网项目总结(基于SSM框架)
  19. 大疆aeb连拍_不适合航拍?不如深度发掘大疆spark拍照功能
  20. Pipeline支撑运维自动化:sftp原子模块

热门文章

  1. 《程序员修炼之道:从小工到专家》阅读笔记03
  2. 外连接就是允许不满足条件的字段查询出来
  3. Oracle优化笔记
  4. 第二部分_搭建Java Web开发环境与配置Tomcat服务器JSP详解
  5. 【转】android Notification 的使用
  6. System.Net.Mail的属性与方法集锦
  7. linux的常用操作——静态库
  8. java 搭建 web服务器 socket实现
  9. Linux命令整理 —— 目录结构
  10. 分布式——ACID原则 CAP理论