c#sqlite帮助类

使用方法:

添加引用:
可网上下载或者添加程序包,本人使用:
在这里插入图片描述

使用前赋值:

  SQLiteHelper.DatabaseFile = "数据库地址"

使用:

返回数据表:ExecuteDataTale(string sql)
执行操作:
public override IDataReader ExecuteReader(string sql)
public override int ExecuteNonQuery(string sql) //返回影响行数
public override object ExecuteScalar(string sql)//返回数据
批量执行:
public override bool ExcuteNonQuerySqlList(List sqlList)

例如:var dt= SQLiteHelper.Instance.ExecuteDataTale("select * from Devs");

帮助类源码

public class SQLiteHelper : BaseSqlHelper
    {
        public static string DatabaseFile { get; set; }
        public static string sqlAccessStr { get; set; }
        private static SQLiteHelper _instance;
        public static SQLiteHelper Instance
        {
            get { return _instance ?? (_instance = new SQLiteHelper(DatabaseFile)); }

        }

        public SQLiteHelper(string file)
        {
            if (string.IsNullOrEmpty(file))
            {
                throw new Exception("文件为空,请先给DatabaseFile赋值或者传入一个不为空的文件名");
            }

            var accessStr = "Data Source={0};Pooling=true;UseUTF16Encoding=true;FailIfMissing=false";
            sqlAccessStr = String.Format(accessStr, file);
        }

        private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, SQLiteTransaction trans,
            CommandType cmdType, string cmdText, SQLiteParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }

            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
            {
                cmd.Transaction = trans;
            }

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


        public override DataTable ExecuteDataTale(string sql)
        {
            var cmd = new SQLiteCommand();
            using (var conn = new SQLiteConnection(sqlAccessStr))
            {
                PrepareCommand(cmd, conn, null, CommandType.Text, sql, null);
                var adapter = new SQLiteDataAdapter(cmd);
                var table = new DataTable();
                adapter.Fill(table);
                cmd.Parameters.Clear();
                return table;
            }
        }

        public override IDataReader ExecuteReader(string sql)
        {
            SQLiteDataReader rdr;
            var cmd = new SQLiteCommand();
            var conn = new SQLiteConnection(sqlAccessStr);
            try
            {
                PrepareCommand(cmd, conn, null, CommandType.Text, sql, null);
                rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
            }
            catch
            {
                conn.Close();
                throw;
            }

            return rdr;
        }

        public override int ExecuteNonQuery(string sql)
        {
            var cmd = new SQLiteCommand();
            using (var conn = new SQLiteConnection(sqlAccessStr))
            {
                PrepareCommand(cmd, conn, null, CommandType.Text, sql, null);
                int count = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return count;
            }
        }

        public override object ExecuteScalar(string sql)
        {
            var cmd = new SQLiteCommand();
            using (var conn = new SQLiteConnection(sqlAccessStr))
            {
                PrepareCommand(cmd, conn, null, CommandType.Text, sql, null);
                var value = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
                return value;
            }
        }
        /// <summary>
        /// 批量导出DataTable的数据到Access表中
        /// 试过自己写的datatable有用,但是公司软件上不可用
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="dt"></param>
        public override void ExcuteTableSql(string tableName, DataTable dt)
        {
            List<string> columnList = new List<string>();
            foreach (DataColumn one in dt.Columns)
            {
                columnList.Add(one.ColumnName);
            }
            SQLiteDataAdapter adapter = new SQLiteDataAdapter();
            using (var conn = new SQLiteConnection(sqlAccessStr))
            {
                adapter.SelectCommand = new SQLiteCommand("select * from " + tableName, conn);
                using (SQLiteCommandBuilder builder = new SQLiteCommandBuilder(adapter))
                {
                    adapter.InsertCommand = builder.GetInsertCommand();
                    adapter.InsertCommand.Parameters.Clear();
                    foreach (string one in columnList)
                    {
                        adapter.InsertCommand.Parameters.Add(new SQLiteParameter(one, dt.Columns[one].DataType));
                    }
                    adapter.Update(dt);
                }
            }
        }
        /// <summary>
        /// 批量执行sqlList
        /// </summary>
        /// <param name="sqlList"></param>
        /// <returns></returns>
        public override bool ExcuteNonQuerySqlList(List<string> sqlList)
        {
            var cmd = new SQLiteCommand();
            using (var conn = new SQLiteConnection(sqlAccessStr))
            {
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                SQLiteTransaction tra = conn.BeginTransaction();
                cmd.Transaction = tra;
                cmd.Connection = conn;
                try
                {
                    foreach (var sql in sqlList)
                    {
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = sql;
                        if (cmd.ExecuteNonQuery() < 0)
                            throw new Exception();
                    }
                    tra.Commit();
                    return true;
                }
                catch
                {
                    tra.Rollback();
                    return false;
                }
            }

        }
        #region 事务

        private static SQLiteCommand _cmd;
        private static SQLiteConnection _conn;
        private static SQLiteTransaction _tran;

        public override IDbTransaction BeginTransaction()
        {
            _cmd = new SQLiteCommand();
            _conn = new SQLiteConnection(sqlAccessStr);
            if (_conn.State == ConnectionState.Closed)
            {
                _conn.Open();
            }

            _tran = _conn.BeginTransaction();
            _cmd.Transaction = _tran;
            _cmd.Connection = _conn;
            return _tran;
        }

        public override void Commit()
        {
            _tran.Commit();
            if (_conn.State == ConnectionState.Open)
            {
                _conn.Close();
            }
        }

        public override void Rollback()
        {
            _tran.Rollback();
            if (_conn.State == ConnectionState.Open)
            {
                _conn.Close();
            }
        }

        public override IDataReader ExecuteReaderTrans(string sql)
        {
            try
            {
                _cmd.CommandType = CommandType.Text;
                _cmd.CommandText = sql;
                return _cmd.ExecuteReader();
            }
            catch
            {
                throw;
            }
        }

        public override int ExecuteNonQueryTrans(string sql)
        {
            try
            {
                _cmd.CommandType = CommandType.Text;
                _cmd.CommandText = sql;
                return _cmd.ExecuteNonQuery();
            }
            catch
            {
                throw;
            }
        }

        public override DataTable ExecuteDataTaleTrans(string sql)
        {
            try
            {
                _cmd.CommandType = CommandType.Text;
                _cmd.CommandText = sql;
                var adapter = new SQLiteDataAdapter(_cmd);
                var table = new DataTable();
                adapter.Fill(table);
                _cmd.Parameters.Clear();
                return table;
            }
            catch
            {
                throw;
            }
        }

        public override object ExecuteScalarTrans(string sql)
        {
            try
            {
                _cmd.CommandType = CommandType.Text;
                _cmd.CommandText = sql;
                var value = _cmd.ExecuteScalar();
                _cmd.Parameters.Clear();
                return value;
            }
            catch
            {
                throw;
            }
        }

        #endregion


    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yyuanyuxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值