SQLite DBHelp

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手写数字识别实现

本文主要实现手写数字识别&#xff0c;利用多类逻辑回归与神经网络两种方法实现 Multi-class Classification 数据源 There are 5000 training examples in ex3data1.mat, where each training example is a 20 pixel by 20 pixel grayscale image of the digit. Each pixe…

Science:若DTC基因检测达2%成年人群,几乎所有人的身份或将无所遁形

来源&#xff1a;测序中国摘要&#xff1a;直接面向消费者&#xff08;DTC&#xff09;的基因检测不仅仅是有趣那么简单&#xff0c;它的有用性随着样本数据库的积累&#xff0c;会逐渐显露出来。消费级基因检测&#xff0c;即直接面向消费者&#xff08;DTC&#xff09;的基因…

降维算法学习

降维的动机 首先,让我们谈论降维是什么。作为一种生动的例子,我们收集的数据集,有许多, 许多特征,我绘制两个在这里。 假设我们未知两个的特征 x1:长度:用厘米表示;X2,是用英寸表示同一物体的长度。 所以,这给了我们高度冗余表示,也许不是两个分开的特征 x1 和 X2,这两个…

年龄大了学Java是爱好还是转型?

年龄大了学Java是爱好还是转型&#xff1f; 一、前言 35岁&#xff0c;好像年龄也不小了&#xff0c;工作也有十年多了&#xff0c;一直搞编程&#xff0c;也已经做过几年研发管理。较多使用的是Delphi语言&#xff0c;对这门语言曾经一度的情有独钟。那是我十年前的一…

人类为什么更聪明 | 人脑神经元关键结构差异被揭示

来源&#xff1a;DeepTech深科技人脑中&#xff0c;数以千计的神经元间电信号交替传送不断&#xff0c;而长短不一的树突&#xff08;神经元胞体延伸&#xff09;在神经元信息整合中起到了关键作用&#xff0c;由此我们的大脑细胞才能正常反应运作。而这次&#xff0c;MIT 的神…

机器学习之异常检测

问题的动机 什么是异常检测呢?为了解释这个概念,让我举一个例子吧: 假想你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行 QA (质量控制测试),而作为这个测试的一部分,你测量了飞机引擎的一些特征变量,比如引擎 运转时产生的热量,或者引擎的振动等等。…

美国《科技与未来城市报告》对中国智慧城市建设的启示

作者&#xff1a;王波、甄峰、卢佩莹来源&#xff1a;科技导报在全球范围内&#xff0c;美国一直引领信息通信技术等科技领域的发展。2008 年全球金融危机后&#xff0c;美国IBM 公司在《智慧地球&#xff1a;下一代领导人议程》主题报告中首次提出“智慧地球”理念&#xff0c…

SVM实现邮件分类

首先学习一下svm分类的使用。 主要有以下步骤&#xff1a; Loading and Visualizing DatajTraining Linear SVM Implementing Gaussian KernelTraining SVM with RBF Kernel 选择最优的C, sigma参数 画出边界线 线性keneral实现 C 1; model svmTrain(X, y, C, linear…

机器学习之推荐系统

我们从一个例子开始定义推荐系统的问题。 假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分。 基于内容的推荐系统 在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这 些数据是有关这些东西的特征。 在我们的例子…

低潮过后,未来医疗可穿戴市场将如何发展?

来源&#xff1a;资本实验室在过去几年中&#xff0c;以智能手表为代表的可穿戴设备市场从快速爆发&#xff0c;并吸引全球厂商趋之若鹜&#xff1b;到如今平缓发展&#xff0c;众多厂商黯然离场&#xff0c;经历了一轮过山车般的炒作周期。但可穿戴设备市场难道只是看上去很美…

大规模机器学习

如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。我们应 该怎样应对一个有 100 万条记录的训练集? 以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和, 如果我们的学习算法需要有 20 次迭代,这便已经是非常大的计算代价。 …

中国半导体:存储器能否打破海外垄断?

来源&#xff1a;中金公司摘要&#xff1a;根据WSTS的统计&#xff0c;全球存储器行业营收2017年达到1319亿美元&#xff0c;占半导体行业收入的30.1%&#xff0c;过去五年(2012-2017)年复合增长率高达37%。▌全球市场概览:千亿美金市场&#xff0c;寡头竞争&#xff0c;IDM模式…

hdu 4588 Count The Carries

思路&#xff1a;容易发现二进制表示的数的最低位规律是01010101……&#xff1b;接着是001100110011……&#xff1b;接着是&#xff1a;0000111100001111…… 这样我们发现每一位的循环节是2^(i1)&#xff0c;前2^i是0&#xff0c;后面的是1.这样就可以算出每一位1出现的次数…

数字图像处理入门

图像是指能在人的视觉系统中产生视觉印象的客观对象&#xff0c;包括自然景物、拍摄到的图片、用数学方法描述的图形.图像的要素有儿何要素〈刻画对象的轮廓、 形状等〉和非几何要素&#xff08;刻画对象的颜色、 材质等〉。 什么是数字图像 简单地说&#xff0c; 数字图像就…

马化腾六年后知乎再提问:未来十年哪些基础科学突破会影响互联网科技产业?...

来源&#xff1a;量子位“未来十年哪些基础科学突破会影响互联网科技产业&#xff1f;产业互联网和消费互联网融合创新&#xff0c;会带来哪些改变&#xff1f;”昨天午夜时分&#xff0c;一个新问题出现在知乎。略微不同之处在于&#xff0c;这个问题的提出者ID是ponyma&#…

2018 中国开源年度报告发布,阿里系独占鳌头

来源&#xff1a;网络大数据摘要&#xff1a;指南针团队使用网络爬虫与 GitHub 数据 API 获取开源代码库的数据如原代码、项目信息、项目的静态信息如项目名称、起始日期等、与动态信息如fork数、客户给与的星数等众多项目相关的信息储存在本地数据结构中。第二篇 数据篇2.1 指…

图像处理中的matlab使用

图像的矩阵表示 类和图像类型 虽然使用的是整数坐标&#xff0c; 但 MATLAB 中的像素值&#xff08;亮度&#xff09;并未限制为整数。 表 1-1 列出了 MATLAB 和图像处理工具箱为描述像素值而支持的各种类。 表中的前 8 项是数值型的数据类&#xff0c;第 9 项称为字符类&…

AI洞观 | 一文读懂2018安博会四大趋势

来源&#xff1a; 网易智能10月23-26日&#xff0c;2018年安博会在北京顺义举行。这是全球规模最大&#xff0c;最具影响力的安防展会之一&#xff0c;据安博会官方介绍&#xff0c;本次展会总面积超过10万平方米&#xff0c;展位数突破5000个&#xff0c;云集了国内外上千家安…

图像的点运算

对于一个数字图像处理系统来说&#xff0c; 一般可以将处理流程分为3个阶段。在获取原始图像 后&#xff0c; 首先是图像预处理阶段&#xff0c; 其次是特征抽取阶段&#xff0c;最后才是识别分析阶段。预处理阶段尤 为重要&#xff0c; 这个阶段处理不好则直接导致后面的工作…

量子计算技术发展迅猛,商业潜力初现!如何把握量子计算时代的新机遇?

来源&#xff1a;蓝驰创投编译&#xff1a;全球君摘要&#xff1a;通用量子计算机一旦实现&#xff0c;将对通信安全、导航、成像以及人工智能、生物制药、新材料研发等诸多领域产生颠覆性影响&#xff0c;带来国家安全和社会经济发展的极大变革。通用量子计算机一旦实现&#…