最近做项目用到了SQLite数据库,就自己写了个SQLite帮助类,类似于SQLHelper。
不过是按照我常用方式写的,主要与SQLHelper不同的是
1、这个帮助类并没有内置ConnectionString,是需要在调用方法的时候指定的,这样的好处的是:在一般的三层架构时都会在Helper里指定一个数据库连接,但是如果我又想用这个帮助类但是我想查询其他数据库的时候就无法使用了。
2、PrepareCommand这个方法我也修改了下,由于增删改查4个方法都用到这个方法来减少重复代码,但是我目前就在插入和更新用到事务操作,查询没有用到,但不知道这样写到底对不对,哪位看了可以帮忙给出个了比较好的解决方法?
3、由于SQLite内置了limit,给我们分页提供了很大的便利,所以我在这个帮助类里面也自己封装了分页方法。
不多说了,附代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- using System.Data.Common;
- using System.Data.SQLite;
- namespace Tools.Data
- {
- /// <summary>
- /// 本类为SQLite数据库帮助静态类,使用时只需直接调用即可,无需实例化
- /// </summary>
- public static class SQLiteHelper
- {
- #region ExecuteNonQuery
- /// <summary>
- /// 执行数据库操作(新增、更新或删除)
- /// </summary>
- /// <param name="connectionString">连接字符串</param>
- /// <param name="cmd">SqlCommand对象</param>
- /// <returns>所受影响的行数</returns>
- public static int ExecuteNonQuery(string connectionString, SQLiteCommand cmd)
- {
- int result = 0;
- if (connectionString == null || connectionString.Length == 0)
- throw new ArgumentNullException("connectionString");
- using (SQLiteConnection con = new SQLiteConnection(connectionString))
- {
- SQLiteTransaction trans = null;
- PrepareCommand(cmd, con, ref trans, true, cmd.CommandType, cmd.CommandText);
- try
- {
- result = cmd.ExecuteNonQuery();
- trans.Commit();
- }