c#连接SQLite

SQLite这个精巧的小数据库,无需安装软件,只需要一个System.Data.SQLite.DLL文件即可操作SQLite数据库。SQLite是一个开源数据库,现在已变得越来越流行,它的体积很小,被广泛应用于各种不同类型的应用中。SQLite已经是世界上布署得最广泛的SQL数据库引擎,被用在无以计数的桌面电脑应用中,还有消费电子设备中,如移动电话、掌上电脑和MP3播放器等。SQLite的源码就放在公有领域(即WikiPedia的public domain)中。

本代码为网上收录的sqlite数据库操作类。

代码正文

Codeusing System;using System.Collections.Generic;using System.Text;using System.Web;using System.Configuration;using System.Data;using System.Data.SQLite;namespace DAL{public class Sqlite{/// <summary>/// 获得连接对象/// </summary>/// <returns></returns>public static SQLiteConnection GetSQLiteConnection(){return new SQLiteConnection("Data Source=" + System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["db"].ToString()));}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);//for (int i = 0; i < p.Length; i++)//    cmd.Parameters[i].Value = p[i];}}public static DataSet ExecuteDataset(string cmdText, params object[] p){DataSet ds = new DataSet();SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);SQLiteDataAdapter da = new SQLiteDataAdapter(command);da.Fill(ds);}return ds;}public static DataRow ExecuteDataRow(string cmdText, params object[] p){DataSet ds = ExecuteDataset(cmdText, p);if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)return ds.Tables[0].Rows[0];return null;}/// <summary>/// 返回受影响的行数/// </summary>/// <param name="cmdText">a</param>/// <param name="commandParameters">传入的参数</param>/// <returns></returns>public static int ExecuteNonQuery(string cmdText, params object[] p){SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);return command.ExecuteNonQuery();}}/// <summary>/// 返回SqlDataReader对象/// </summary>/// <param name="cmdText"></param>/// <param name="commandParameters">传入的参数</param>/// <returns></returns>public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p){SQLiteCommand command = new SQLiteCommand();SQLiteConnection connection = GetSQLiteConnection();try{PrepareCommand(command, connection, cmdText, p);SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);return reader;}catch{connection.Close();throw;}}/// <summary>/// 返回结果集中的第一行第一列,忽略其他行或列/// </summary>/// <param name="cmdText"></param>/// <param name="commandParameters">传入的参数</param>/// <returns></returns>public static object ExecuteScalar(string cmdText, params object[] p){SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(cmd, connection, cmdText, p);return cmd.ExecuteScalar();}}/// <summary>/// 分页/// </summary>/// <param name="recordCount"></param>/// <param name="pageIndex"></param>/// <param name="pageSize"></param>/// <param name="cmdText"></param>/// <param name="countText"></param>/// <param name="p"></param>/// <returns></returns>public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params object[] p){if (recordCount < 0)recordCount = int.Parse(ExecuteScalar(countText, p).ToString());DataSet ds = new DataSet();SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);SQLiteDataAdapter da = new SQLiteDataAdapter(command);da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");}return ds;}}}

System.Data.SQLite数据库通用类

针对对数据库的操作情况,分为以下几种情况:

创建数据库文件;

返回DataTable;

返回DataReader;

执行增删改,返回受影响的行数;

执行查询,返回第一行第一列(通常用于带有行函数的查询,如SUM/AVG/COUNT等);

返回库中所有的表;

因为在System.Data.SQLite中不存在存储过程,所以所有的操作都是基于文本的SQL语句,为了避免SQL注入,所以使用了参数化的SQL语句,这个数据库通用类如下:

Codeusing System;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;namespace SQLiteQueryBrowser
{/// <summary>/// 说明:这是一个针对System.Data.SQLite的数据库常规操作封装的通用类。/// 作者:zhoufoxcn(周公)/// 日期:2010-04-01/// Blog:http://zhoufoxcn.blog.51cto.com or http://blog.csdn.net/zhoufoxcn/// Version:0.1/// </summary>public class SQLiteDBHelper{private string connectionString = string.Empty;/// <summary>/// 构造函数/// </summary>/// <param name="dbPath">SQLite数据库文件路径</param>public SQLiteDBHelper(string dbPath){this.connectionString = "Data Source=" + dbPath;}/// <summary>/// 创建SQLite数据库文件/// </summary>/// <param name="dbPath">要创建的SQLite数据库文件路径</param>public static void CreateDB(string dbPath){using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + dbPath)){connection.Open();using (SQLiteCommand command = new SQLiteCommand(connection)){command.CommandText = "CREATE TABLE Demo(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE)";command.ExecuteNonQuery();command.CommandText = "DROP TABLE Demo";command.ExecuteNonQuery();}}}/// <summary>/// 对SQLite数据库执行增删改操作,返回受影响的行数。/// </summary>/// <param name="sql">要执行的增删改的SQL语句</param>/// <param name="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>/// <returns></returns>public int ExecuteNonQuery(string sql, SQLiteParameter[] parameters){int affectedRows = 0;using (SQLiteConnection connection = new SQLiteConnection(connectionString)){connection.Open();using (DbTransaction transaction = connection.BeginTransaction()){using (SQLiteCommand command = new SQLiteCommand(connection)){command.CommandText = sql;if (parameters != null){command.Parameters.AddRange(parameters);}affectedRows = command.ExecuteNonQuery();}transaction.Commit();}}return affectedRows;}/// <summary>/// 执行一个查询语句,返回一个关联的SQLiteDataReader实例/// </summary>/// <param name="sql">要执行的查询语句</param>/// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>/// <returns></returns>public SQLiteDataReader ExecuteReader(string sql, SQLiteParameter[] parameters){SQLiteConnection connection = new SQLiteConnection(connectionString);SQLiteCommand command = new SQLiteCommand(sql, connection);if (parameters != null){command.Parameters.AddRange(parameters);}connection.Open();return command.ExecuteReader(CommandBehavior.CloseConnection);}/// <summary>/// 执行一个查询语句,返回一个包含查询结果的DataTable/// </summary>/// <param name="sql">要执行的查询语句</param>/// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>/// <returns></returns>public DataTable ExecuteDataTable(string sql, SQLiteParameter[] parameters){using (SQLiteConnection connection = new SQLiteConnection(connectionString)){using (SQLiteCommand command = new SQLiteCommand(sql, connection)){if (parameters != null){command.Parameters.AddRange(parameters);}SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);DataTable data = new DataTable();adapter.Fill(data);return data;}}}/// <summary>/// 执行一个查询语句,返回查询结果的第一行第一列/// </summary>/// <param name="sql">要执行的查询语句</param>/// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>/// <returns></returns>public Object ExecuteScalar(string sql, SQLiteParameter[] parameters){using (SQLiteConnection connection = new SQLiteConnection(connectionString)){using (SQLiteCommand command = new SQLiteCommand(sql, connection)){if (parameters != null){command.Parameters.AddRange(parameters);}SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);DataTable data = new DataTable();adapter.Fill(data);return data;}}}/// <summary>/// 查询数据库中的所有数据类型信息/// </summary>/// <returns></returns>public DataTable GetSchema(){using (SQLiteConnection connection = new SQLiteConnection(connectionString)){connection.Open();DataTable data=connection.GetSchema("TABLES");connection.Close();//foreach (DataColumn column in data.Columns)//{//    Console.WriteLine(column.ColumnName);//}return data;}}}
}

转载于:https://www.cnblogs.com/sczw-maqing/p/3259525.html

SQLite DBHelp相关推荐

  1. Android数据库 之 SQLite数据库

    一.关系型数据库SQLIte 每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于20 ...

  2. android SQLite数据库用法图文详解(附源码)

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 SQLite是嵌入式设备使用的一种轻量型数据库.可以通过执行sql语句对数据库进行操作,android ...

  3. 策略模式实现支持多种类数据库的DBHelp

    概述 需求 有时我们的系统需要支持多种数据库,如即要支持MSSQL server又要同时支持Oracle database.而如果我们为些实现两套数据库操作的方式,就会不能很好的达到软件设计的目标:高 ...

  4. mysql 数据库dbhelp_策略模式实现支持多种类数据库的DBHelp

    概述 需求 有时我们的系统需要支持多种数据库,如即要支持MSSQL server又要同时支持Oracle database.而如果我们为些实现两套数据库操作的方式,就会不能很好的达到软件设计的目标:高 ...

  5. android数据库isnull,Android中SQLite数据库知识点总结

    SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...

  6. C++ VS2013环境编译使用sqlite数据库全过程

    转载:http://www.cnblogs.com/imoon/archive/2012/11/30/2796726.html 转载:https://blog.csdn.net/hjm4702192/ ...

  7. iOS开发-xcdatamodeld文件 CoreData的介绍和使用,sqlite的使用

    CoreData的介绍和使用  源引:http://www.jianshu.com/p/d027090af00e CoreData是数据存储的一种方式,CoreData实质也是对SQLite的封装. ...

  8. node sqlite 插入数据_安卓手机中的应用数据都保存在哪些文件中?

    随笔 知识 案例 声音 其他 编者按 手机取证,品牌是一方面,从操作系统入手是另外一个渠道.手机中的重要数据基本上都以轻量数据库的形式保存在本地,也就是经常讲的sqlite db文件中. 从推特上得知 ...

  9. android数据库降级_Android SQLite (二.数据库创建,升级及降级)

    上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作,本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理. 一.SQLiteOpenHelper ...

最新文章

  1. CVPR2018上关于目标检测(object detection)
  2. NetCore入门篇:(二)Net Core项目创建
  3. 执行计划信息Oracle 执行计划总结
  4. C++重载(overload)和重写(覆盖)的区别?
  5. Java8排序–性能陷阱
  6. 关于寒假作业存在问题的强调
  7. servlet跳转问题
  8. 图片裁切批处理_图片批量处理 如何批量将图片裁剪成一样的大小?按照一定的比例快速裁剪多张照片...
  9. 排除美颜相机等第三方相机直接调用系统相机处理方法
  10. 物理机无法ping通虚拟机,虚拟机能ping通物理机
  11. [Obsidian]懒人必备插件附使用教程
  12. 国科大数据挖掘课程总结
  13. 修改linux系统的时间PRC,Ubuntu16.04操作系统环境下修改时区
  14. 【实习之路】腾讯、小米日常实习生面试经历分享——小米篇
  15. 一看就懂→专票电子化的三条实现路径
  16. 链克的链克袋鼠钱包插件的安装和使用
  17. 小米android隐藏游戏,小米平板怎么将游戏隐藏桌面
  18. Chrome 开发工具之Sources
  19. UVa 109 - SCUD Busters
  20. 【项目管理案例】第五期:如何规划项目预算和资源

热门文章

  1. 二、Vue基础语法学习笔记——事件监听v-on、条件判断(v-if、v-else-if、v-else、v-show)、循环遍历(v-for遍历数组对象,key属性、检测数组更新)、图书案例、双向绑定
  2. conda安装pytorch1.10.1+paddlepaddle-gpu2.2.1+cuda10.2+cudnn7.6.5
  3. LeetCode 644. 最大平均子段和 II(二分查找)*
  4. LeetCode 1215. 步进数(BFS/DFS)
  5. LeetCode 500. 键盘行
  6. LeetCode 69. x 的平方根(二分查找)
  7. LeetCode 78. 子集(回溯)
  8. oid 值 内存使用_[技术干货] zabbix监控项原型组合键值
  9. python牛顿法计算平方根_常用的平方根算法详解与实现
  10. 【机器学习】sclearn分类算法-决策树、随机森林