sqlite 操作类

//本是转载,找不到原来的地方
//特些说明,不是原创
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
using System.Text;

namespace 扶贫数据库管理
{

/// <summary>
/// 本类为SQLite数据库帮助静态类,使用时只需直接调用即可,无需实例化
/// </summary>
public static class myDB
{
    
   
    /// <summary>
    /// 数据库连接字符串
    /// </summary>
    public static string connectionString = "Data Source=" + System.Environment.CurrentDirectory + "\\fpdb.db";


    #region 执行数据库操作(新增、更新或删除),返回影响行数
    /// <summary>
    /// 执行数据库操作(新增、更新或删除)
    /// </summary>
    /// <param name="cmd">SqlCommand对象</param>
    /// <returns>所受影响的行数</returns>
    public static int ExecuteNonQuery(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();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
        }
        return result;
    }

    /// <summary>
    /// 执行数据库操作(新增、更新或删除)
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <returns>所受影响的行数</returns>
    public static int ExecuteNonQuery(string commandText, CommandType commandType = CommandType.Text)
    {
        int result = 0;
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");
        SQLiteCommand cmd = new SQLiteCommand();
        using (SQLiteConnection con = new SQLiteConnection(connectionString))
        {
            SQLiteTransaction trans = null;
            PrepareCommand(cmd, con, ref trans, true, commandType, commandText);
            try
            {
                result = cmd.ExecuteNonQuery();
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
        }
        return result;
    }

    /// <summary>
    /// 执行数据库操作(新增、更新或删除)
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <param name="cmdParms">SQL参数对象</param>
    /// <returns>所受影响的行数</returns>
    public static int ExecuteNonQuery(string commandText, CommandType commandType = CommandType.Text, params SQLiteParameter[] cmdParms)
    {
        int result = 0;
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");

        SQLiteCommand cmd = new SQLiteCommand();
        using (SQLiteConnection con = new SQLiteConnection(connectionString))
        {
            SQLiteTransaction trans = null;
            PrepareCommand(cmd, con, ref trans, true, commandType, commandText, cmdParms);
            try
            {
                result = cmd.ExecuteNonQuery();
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
        }
        return result;
    }
    #endregion

    #region 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
    /// <summary>
    /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
    /// </summary>
    /// <param name="cmd">SqlCommand对象</param>
    /// <returns>查询所得的第1行第1列数据</returns>
    public static object ExecuteScalar(SQLiteCommand cmd)
    {
        object 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.ExecuteScalar();
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
        }
        return result;
    }

    /// <summary>
    /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <returns>查询所得的第1行第1列数据</returns>
    public static object ExecuteScalar(string commandText, CommandType commandType = CommandType.Text)
    {
        object result = 0;
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");
        SQLiteCommand cmd = new SQLiteCommand();
        using (SQLiteConnection con = new SQLiteConnection(connectionString))
        {
            SQLiteTransaction trans = null;
            PrepareCommand(cmd, con, ref trans, true, commandType, commandText);
            try
            {
                result = cmd.ExecuteScalar();
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
        }
        return result;
    }

    /// <summary>
    /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <param name="cmdParms">SQL参数对象</param>
    /// <returns>查询所得的第1行第1列数据</returns>
    public static object ExecuteScalar(string commandText, CommandType commandType = CommandType.Text, params SQLiteParameter[] cmdParms)
    {
        object result = 0;
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");

        SQLiteCommand cmd = new SQLiteCommand();
        using (SQLiteConnection con = new SQLiteConnection(connectionString))
        {
            SQLiteTransaction trans = null;
            PrepareCommand(cmd, con, ref trans, true, commandType, commandText, cmdParms);
            try
            {
                result = cmd.ExecuteScalar();
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
        }
        return result;
    }
    #endregion

    #region 执行数据库查询,返回SqlDataReader对象
    /// <summary>
    /// 执行数据库查询,返回SqlDataReader对象
    /// </summary>
    /// <param name="cmd">SqlCommand对象</param>
    /// <returns>SqlDataReader对象</returns>
    public static DbDataReader ExecuteReader(SQLiteCommand cmd)
    {
        DbDataReader reader = null;
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");

        SQLiteConnection con = new SQLiteConnection(connectionString);
        SQLiteTransaction trans = null;
        PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText);
        try
        {
            reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return reader;
    }

    /// <summary>
    /// 执行数据库查询,返回SqlDataReader对象
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <returns>SqlDataReader对象</returns>
    public static DbDataReader ExecuteReader(string commandText, CommandType commandType = CommandType.Text)
    {
        DbDataReader reader = null;
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");

        SQLiteConnection con = new SQLiteConnection(connectionString);
        SQLiteCommand cmd = new SQLiteCommand();
        SQLiteTransaction trans = null;
        PrepareCommand(cmd, con, ref trans, false, commandType, commandText);
        try
        {
            reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return reader;
    }

    /// <summary>
    /// 执行数据库查询,返回SqlDataReader对象
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <param name="cmdParms">SQL参数对象</param>
    /// <returns>SqlDataReader对象</returns>
    public static DbDataReader ExecuteReader(string commandText, CommandType commandType = CommandType.Text, params SQLiteParameter[] cmdParms)
    {
        DbDataReader reader = null;
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");

        SQLiteConnection con = new SQLiteConnection(connectionString);
        SQLiteCommand cmd = new SQLiteCommand();
        SQLiteTransaction trans = null;
        PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);
        try
        {
            reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return reader;
    }
    #endregion

    #region 执行数据库查询,返回DataSet对象
    /// <summary>
    /// 执行数据库查询,返回DataSet对象
    /// </summary>
    /// <param name="cmd">SqlCommand对象</param>
    /// <returns>DataSet对象</returns>
    public static DataSet ExecuteDataSet(SQLiteCommand cmd)
    {
        DataSet ds = new DataSet();
        SQLiteConnection con = new SQLiteConnection(connectionString);
        SQLiteTransaction trans = null;
        PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText);
        try
        {
            SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
            sda.Fill(ds);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (cmd.Connection != null)
            {
                if (cmd.Connection.State == ConnectionState.Open)
                {
                    cmd.Connection.Close();
                }
            }
        }
        return ds;
    }

    /// <summary>
    /// 执行数据库查询,返回DataSet对象
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <returns>DataSet对象</returns>
    public static DataSet ExecuteDataSet(string commandText, CommandType commandType = CommandType.Text)
    {
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");
        DataSet ds = new DataSet();
        SQLiteConnection con = new SQLiteConnection(connectionString);
        SQLiteCommand cmd = new SQLiteCommand();
        SQLiteTransaction trans = null;
        PrepareCommand(cmd, con, ref trans, false, commandType, commandText);
        try
        {
            SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
            sda.Fill(ds);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (con != null)
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }
        return ds;
    }

    /// <summary>
    /// 执行数据库查询,返回DataSet对象
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <param name="cmdParms">SQL参数对象</param>
    /// <returns>DataSet对象</returns>
    public static DataSet ExecuteDataSet(string commandText, CommandType commandType = CommandType.Text, params SQLiteParameter[] cmdParms)
    {
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");
        DataSet ds = new DataSet();
        SQLiteConnection con = new SQLiteConnection(connectionString);
        SQLiteCommand cmd = new SQLiteCommand();
        SQLiteTransaction trans = null;
        PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms);
        try
        {
            SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
            sda.Fill(ds);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (con != null)
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }
        return ds;
    }
    #endregion

    #region 执行数据库查询,返回DataTable对象
    /// <summary>
    /// 执行数据库查询,返回DataTable对象
    /// </summary>
    /// <param name="commandText">执行语句或存储过程名</param>
    /// <param name="commandType">执行类型(默认语句)</param>
    /// <returns>DataTable对象</returns>
    public static DataTable ExecuteDataTable(string commandText, CommandType commandType = CommandType.Text)
    {
        if (connectionString == null || connectionString.Length == 0)
            throw new ArgumentNullException("connectionString");
        if (commandText == null || commandText.Length == 0)
            throw new ArgumentNullException("commandText");
        DataTable dt = new DataTable();
        SQLiteConnection con = new SQLiteConnection(connectionString);
        SQLiteCommand cmd = new SQLiteCommand();
        SQLiteTransaction trans = null;
        PrepareCommand(cmd, con, ref trans, false, commandType, commandText);
        try
        {
            SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
            sda.Fill(dt);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (con != null)
            {
                if (con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }
        return dt;
    }

    #endregion

    #region 通用分页查询方法
    /// <summary>
    /// 通用分页查询方法
    /// </summary>
    /// <param name="tableName">表名</param>
    /// <param name="strColumns">查询字段名</param>
    /// <param name="strWhere">where条件</param>
    /// <param name="strOrder">排序条件</param>
    /// <param name="pageSize">每页数据数量</param>
    /// <param name="currentIndex">当前页数</param>
    /// <param name="recordOut">数据总量</param>
    /// <returns>DataTable数据表</returns>
    public static DataTable SelectPaging(string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, out int recordOut)
    {
        DataTable dt = new DataTable();
        recordOut = Convert.ToInt32(ExecuteScalar("select count(*) from " + tableName, CommandType.Text));
        string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} ";
        int offsetCount = (currentIndex - 1) * pageSize;
        string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString());
        using (DbDataReader reader = ExecuteReader(commandText, CommandType.Text))
        {
            if (reader != null)
            {
                dt.Load(reader);
            }
        }
        return dt;
    }

    #endregion

    #region 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化
    /// <summary>
    /// 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化
    /// </summary>
    /// <param name="cmd">Command对象</param>
    /// <param name="conn">Connection对象</param>
    /// <param name="trans">Transcation对象</param>
    /// <param name="useTrans">是否使用事务</param>
    /// <param name="cmdType">SQL字符串执行类型</param>
    /// <param name="cmdText">SQL Text</param>
    /// <param name="cmdParms">SQLiteParameters to use in the command</param>
    private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, ref SQLiteTransaction trans, bool useTrans, CommandType cmdType, string cmdText, params SQLiteParameter[] cmdParms)
    {

        if (conn.State != ConnectionState.Open)
            conn.Open();

        cmd.Connection = conn;
        cmd.CommandText = cmdText;

        if (useTrans)
        {
            trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
            cmd.Transaction = trans;
        }


        cmd.CommandType = cmdType;

        if (cmdParms != null)
        {
            foreach (SQLiteParameter parm in cmdParms)
                cmd.Parameters.Add(parm);
        }
    }

    #endregion

}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值