最近有WPF做客户端,需要离线操作存储数据,在项目中考虑使用Sqlite嵌入式数据库,在网上找了不少资料,最终整理出一个公共的帮助类。

Sqlite是一个非常小巧的数据库,基本上具备关系型数据库操作的大多数功能,Sql语法也大同小异。下面是我整理的帮助类代码:

1.获取 SQLiteConnection 对象,传入数据库有地址即可。

  1.    /// <summary>
            /// 获得连接对象
            /// </summary>
            /// <returns>SQLiteConnection</returns>
            public static SQLiteConnection GetSQLiteConnection()
            {
                //Sqlite数据库地址
                string str = AppDomain.CurrentDomain.BaseDirectory;
                var con = new SQLiteConnection("Data Source=" + str + "DataBass\\InfoServiceDbB.db");
                return con;
            }

2.准备操作命令参数,构造SQLiteCommand 对象:

  1. /// <summary>
  2. /// 准备操作命令参数
  3. /// </summary>
  4. /// <param name="cmd">SQLiteCommand</param>
  5. /// <param name="conn">SQLiteConnection</param>
  6. /// <param name="cmdText">Sql命令文本</param>
  7. /// <param name="data">参数数组</param>
  8. private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, Dictionary<String, String> data)
  9. {
  10. if (conn.State != ConnectionState.Open)
  11. conn.Open();
  12. cmd.Parameters.Clear();
  13. cmd.Connection = conn;
  14. cmd.CommandText = cmdText;
  15. cmd.CommandType = CommandType.Text;
  16. cmd.CommandTimeout = ;
  17. if (data!=null&&data.Count >= )
  18. {
  19. foreach (KeyValuePair<String, String> val in data)
  20. {
  21. cmd.Parameters.AddWithValue(val.Key, val.Value);
  22. }
  23. }
  24. }

3.查询,返回DataSet

  1. /// <summary>
  2. /// 查询,返回DataSet
  3. /// </summary>
  4. /// <param name="cmdText">Sql命令文本</param>
  5. /// <param name="data">参数数组</param>
  6. /// <returns>DataSet</returns>
  7. public static DataSet ExecuteDataset(string cmdText, Dictionary<string, string> data)
  8. {
  9. var ds = new DataSet();
  10. using (SQLiteConnection connection = GetSQLiteConnection())
  11. {
  12. var command = new SQLiteCommand();
  13. PrepareCommand(command, connection, cmdText, data);
  14. var da = new SQLiteDataAdapter(command);
  15. da.Fill(ds);
  16. }
  17. return ds;
  18. }

4.查询,返回DataTable

  1. /// <summary>
  2. /// 查询,返回DataTable
  3. /// </summary>
  4. /// <param name="cmdText">Sql命令文本</param>
  5. /// <param name="data">参数数组</param>
  6. /// <returns>DataTable</returns>
  7. public static DataTable ExecuteDataTable(string cmdText, Dictionary<string, string> data)
  8. {
  9. var dt = new DataTable();
  10. using (SQLiteConnection connection = GetSQLiteConnection())
  11. {
  12. var command = new SQLiteCommand();
  13. PrepareCommand(command, connection, cmdText, data);
  14. SQLiteDataReader reader = command.ExecuteReader();
  15. dt.Load(reader);
  16. }
  17. return dt;
  18. }

5.返回一行数据 DataRow

  1. /// <summary>
  2. /// 返回一行数据
  3. /// </summary>
  4. /// <param name="cmdText">Sql命令文本</param>
  5. /// <param name="data">参数数组</param>
  6. /// <returns>DataRow</returns>
  7. public static DataRow ExecuteDataRow(string cmdText, Dictionary<string, string> data)
  8. {
  9. DataSet ds = ExecuteDataset(cmdText, data);
  10. if (ds != null && ds.Tables.Count > && ds.Tables[].Rows.Count > )
  11. return ds.Tables[].Rows[];
  12. return null;
  13. }

6.执行数据库操作

  1. /// <summary>
  2. /// 执行数据库操作
  3. /// </summary>
  4. /// <param name="cmdText">Sql命令文本</param>
  5. /// <param name="data">传入的参数</param>
  6. /// <returns>返回受影响的行数</returns>
  7. public static int ExecuteNonQuery(string cmdText, Dictionary<string, string> data)
  8. {
  9. using (SQLiteConnection connection = GetSQLiteConnection())
  10. {
  11. var command = new SQLiteCommand();
  12. PrepareCommand(command, connection, cmdText, data);
  13. return command.ExecuteNonQuery();
  14. }
  15. }

7.返回SqlDataReader对象

  1. /// <summary>
  2. /// 返回SqlDataReader对象
  3. /// </summary>
  4. /// <param name="cmdText">Sql命令文本</param>
  5. /// <param name="data">传入的参数</param>
  6. /// <returns>SQLiteDataReader</returns>
  7. public static SQLiteDataReader ExecuteReader(string cmdText, Dictionary<string, string> data)
  8. {
  9. var command = new SQLiteCommand();
  10. SQLiteConnection connection = GetSQLiteConnection();
  11. try
  12. {
  13. PrepareCommand(command, connection, cmdText, data);
  14. SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
  15. return reader;
  16. }
  17. catch
  18. {
  19. connection.Close();
  20. command.Dispose();
  21. throw;
  22. }
  23. }

8.返回结果集中的第一行第一列,忽略其他行或列

  1. /// <summary>
  2. /// 返回结果集中的第一行第一列,忽略其他行或列
  3. /// </summary>
  4. /// <param name="cmdText">Sql命令文本</param>
  5. /// <param name="data">传入的参数</param>
  6. /// <returns>object</returns>
  7. public static object ExecuteScalar(string cmdText, Dictionary<string, string> data)
  8. {
  9. using (SQLiteConnection connection = GetSQLiteConnection())
  10. {
  11. var cmd = new SQLiteCommand();
  12. PrepareCommand(cmd, connection, cmdText, data);
  13. return cmd.ExecuteScalar();
  14. }
  15. }

9.分页查询

  1. /// <summary>
  2. /// 分页查询
  3. /// </summary>
  4. /// <param name="recordCount">总记录数</param>
  5. /// <param name="pageIndex">页牵引</param>
  6. /// <param name="pageSize">页大小</param>
  7. /// <param name="cmdText">Sql命令文本</param>
  8. /// <param name="countText">查询总记录数的Sql文本</param>
  9. /// <param name="data">命令参数</param>
  10. /// <returns>DataSet</returns>
  11. public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, Dictionary<string, string> data)
  12. {
  13. if (recordCount < )
  14. recordCount = int.Parse(ExecuteScalar(countText, data).ToString());
  15. var ds = new DataSet();
  16. using (SQLiteConnection connection = GetSQLiteConnection())
  17. {
  18. var command = new SQLiteCommand();
  19. PrepareCommand(command, connection, cmdText, data);
  20. var da = new SQLiteDataAdapter(command);
  21. da.Fill(ds, (pageIndex - ) * pageSize, pageSize, "result");
  22. }
  23. return ds;
  24. }

10.重新组织数据库

  1. 当你从SQLite数据库中删除数据时, 未用的磁盘空间将会加入一个内部的“自由列表”中。 
  2.  当你下次插入数据时,这部分空间可以重用。磁盘空间不会丢失, 但也不会返还给操作系统。 
  3.  如果删除了大量数据,而又想缩小数据库文件占用的空间,执行 VACUUM 命令。 VACUUM 将会从头重新组织数据库
  4.  
  5. 你可以在你的程序中约定一个时间间隔执行一次重新组织数据库的操作,节约空间
  1. public void ResetDataBass()
  2. {
  3. using (SQLiteConnection conn = GetSQLiteConnection())
  4. {
  5. var cmd = new SQLiteCommand();
  6.  
  7. if (conn.State != ConnectionState.Open)
  8. conn.Open();
  9. cmd.Parameters.Clear();
  10. cmd.Connection = conn;
  11. cmd.CommandText = "vacuum";
  12. cmd.CommandType = CommandType.Text;
  13. cmd.CommandTimeout = ;
  14. cmd.ExecuteNonQuery();
  15. }
  16. }
  1.  
  1.  

c# Sqlite帮助类的更多相关文章

  1. PHP基于PDO实现的SQLite操作类

    <?php // sqlite分页类 class SqliteDB{ public function __construct(){ // 初始化数据库,并且连接数据库 数据库配置 $this-& ...

  2. Android Sqlite 工具类封装

    鉴于经常使用 Sqlite 数据库做数据持久化处理,进行了一点封装,方便使用. 该封装类主要支持一下功能 支持多用户数据储存 支持 Sqlite数据库升级 支持传入 Sql 语句建表 支持 SQLit ...

  3. SQLite存储类(数据类型)

    SQLite数据类型更普遍,采用动态类型系统. 说是数据类型,更像是存储类,如:INTEGER存储类就包含多种不同长度的整数数据类型 [INTEGER]带符号的整数类型 [REAL]浮点值,小数类型 ...

  4. Sqlite 帮助类 SQLiteHelper

    ///源码下载地址:http://download.csdn.net/detail/kehaigang29/8836171 ///dll下载地址:http://download.csdn.net/de ...

  5. sqlite帮助类

    帮助类 using System; using System.Collections.Generic; using System.Data; using System.Data.SQLite; usi ...

  6. Android SQLITE 操作工具类

    首先创建一个类 DatabaseHelper 继承SQLiteOpenHelper帮助类,定义数据库版本,数据库名称,创建表名. private static final int DATABASE_V ...

  7. php封装的sqlite操作类

    sqlite在php中是默认安装的本地小型化数据库,类似于xml的小型数据库,但sqlite功能更强. sqlite.class.php文件: <?php class sqliteDB{ pri ...

  8. 封装Qt的SQLite接口类

    还没测试完善.. #ifndef SQLITE_H #define SQLITE_H #include <QSqlDatabase> #include <QSqlQuery> ...

  9. SQLite帮助类SQlitehelper 实现对SQLite数据的增删改查

    public class SQLiteHelper { public const string sConn = "Data Source=" + @"path" ...

随机推荐

  1. Python--将内容写入文本文件中

    #-*- coding: utf-8 -*- import sys __cfg__version__ = 'debug' # release if __name__ == '__main__': pr ...

  2. ux.plugin.ConTpl 模版元素监听扩展

    /* *tpl模版加入按钮 *<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-s ...

  3. 读书笔记_Effective_C++_条款四十六:需要类型转换时请为模板定义非成员函数

    这个条款可以看成是条款24的续集,我们先简单回顾一下条款24,它说了为什么类似于operator *这样的重载运算符要定义成非成员函数(是为了保证混合乘法2*SomeRational或者SomeRat ...

  4. 【eoe 6】ActionBar的使用

    一. Action Bar 一般位于屏幕顶部,包括四个可操作区域: 应用图标或LOGO区域,用于视图控制的Spinner下拉菜单或TAB控件区域, Action button(也称为Action It ...

  5. Web API 入门系列- 从一个示例开始

    1.新建Web API项目 2.新建bookModel 3.新建book web api 控制器 为了简单方便,演示系统使用内存集合持久化书籍. 4.测试web api 我们怎么方便测试web api ...

  6. 用CentOS 7打造合适的科研环境 :zhuan

    这篇博文记录了我用CentOS 7搭建地震学科研环境的过程,供我个人在未来重装系统时参考.对于其他地震学科研人员,也许有借鉴意义. 阅读须知: 本文适用于个人电脑,不适用于服务器: 不推荐刚接触Lin ...

  7. Linux下查看tcp连接数及状态

    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’ TIME_WAIT 8947FIN_WAIT1 15FIN_W ...

  8. 代码演示 .NET 4.5 自带的 ReadonlyCollection 的使用

    代码如下: 1. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  9. ruby -- 基础学习(七)时间的内置函数和格式说明

        Rails -- 时间的内置函数和格式说明 FROM:http://www.douban.com/note/99064603/ time = Time.now #获得当前时间 time.gmt ...

  10. php和java的memcached使用的兼容性问题解决过程

    1. 背景: php 使用memcached客户端设置一个key,java使用java-memcached-client去读,报错如下: ERROR|com.whalin.MemCached.MemC ...