C#访问SQLite库

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Text;

namespace mynamespace
{
    public static class SQLiteDbHelper
    {
        private static SQLiteConnection GetSqLiteConnection(string connectionStr)
        {
            return new SQLiteConnection(connectionStr);
        }

        private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText,
                                           params object[] cmdParams)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Parameters.Clear();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            cmd.CommandType = CommandType.Text;
            cmd.CommandTimeout = 10;
            if (cmdParams != null)
            {
                foreach (SQLiteParameter parameter in cmdParams)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput ||
                         parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                }
            }
        }

        /// <summary>
        /// 执行语句返回DataSet
        /// </summary>
        /// <param name="connectionStr">数据库连接信息</param>
        /// <param name="cmdText">执行语句</param>
        /// <param name="params">参数</param>
        /// <returns></returns>
        public static DataSet ExecuteDataset(string connectionStr, string cmdText, params object[] @params)
        {
            var ds = new DataSet();
            var connection = GetSqLiteConnection(connectionStr);
            try
            {
                var command = new SQLiteCommand();
                PrepareCommand(command, connection, cmdText, @params);
                var da = new SQLiteDataAdapter(command);
                da.Fill(ds); 
            }
            catch (Exception ex)
            {
                LogHelper.JMS_Error_Log("SQLiteDbHelper_ExecuteDataset_SQL出错:" + cmdText + "DB:" + connectionStr+ ex);
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
            return ds;
        }

        /// <summary>
        /// 执行语句返回影响行数
        /// </summary>
        /// <param name="connectionStr">数据库连接信息</param>
        /// <param name="cmdText">执行语句</param>
        /// <param name="params">参数</param>
        /// <returns></returns>
        public static DataRow ExecuteDataRow(string connectionStr, string cmdText, params object[] @params)
        {
            var ds = ExecuteDataset(connectionStr, cmdText, @params);
            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                return ds.Tables[0].Rows[0];
            return null;
        }

        /// <summary>
        /// 执行SQL 返回受影响的行数
        /// </summary>
        /// <param name="connectionStr">connectionStr</param>
        /// <param name="cmdText">Command Text</param>
        /// <param name="parameters">传入的参数</param>
        /// <returns></returns>
        public static int ExecuteNonQuery(string connectionStr, string cmdText, params object[] parameters)
        {
            var connection = GetSqLiteConnection(connectionStr);
            try
            {
                var command = new SQLiteCommand();
                PrepareCommand(command, connection, cmdText, parameters);
                return command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                LogHelper.JMS_Error_Log("SQLiteDbHelper_ExecuteNonQuery_SQL出错:" + cmdText + "DB:" + connectionStr + ex); 
                return -999;
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
        }
        /// <summary>
        /// 在同一事物里批量执行SQL
        /// </summary>
        /// <param name="connectionStr">connectionStr</param>
        /// <param name="sqlList">SQL集合</param>
        /// <returns></returns>
        public static bool ExcuteBatchSQL(string connectionStr, List<string> sqlList)
        {
            if (sqlList.Count == 0)
                return false;
            var connection = GetSqLiteConnection(connectionStr);
            connection.Open();
            var transaction = connection.BeginTransaction();
            try
            {
                foreach (string cmdText in sqlList)
                {
                    var command = new SQLiteCommand();
                    PrepareCommand(command, connection, cmdText, null);
                    command.ExecuteNonQuery();
                }
                transaction.Commit();
                return true;
            }
            catch (Exception ex)
            {
                transaction.Rollback();
                var sb = new StringBuilder();
                foreach (var sql in sqlList)
                {
                    sb.AppendLine(sql + ";");
                }
                LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + sb.ToString() + "DB:" + connectionStr + ex); 
                return false;
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                {
                    connection.Close();
                }
            }
        }

        /// <summary>
        /// 返回SqlDataReader对象
        /// </summary>
        /// <param name="connectionStr">数据库连接信息</param>
        /// <param name="cmdText">执行SQL</param>
        /// <param name="parameters">传入的参数</param>
        /// <returns></returns>
        public static SQLiteDataReader ExecuteReader(string connectionStr, string cmdText, params object[] parameters)
        {
            var command = new SQLiteCommand();
            var connection = GetSqLiteConnection(connectionStr);
            try
            {
                PrepareCommand(command, connection, cmdText, parameters);
                var reader = command.ExecuteReader(CommandBehavior.CloseConnection);
                return reader;
            }
            catch (Exception ex)
            {
                connection.Close();
                LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + cmdText + "DB:" + connectionStr + ex); 
                throw;
            }
        }

        /// <summary>
        /// 返回结果集中的第一行第一列,忽略其他行或列
        /// </summary>
        /// <param name="connectionStr">connectionStr</param>
        /// <param name="cmdText">Command Text</param>
        /// <param name="parameters">传入的参数</param>
        /// <returns></returns>
        public static object ExecuteScalar(string connectionStr, string cmdText, params object[] parameters)
        {
            var connection = GetSqLiteConnection(connectionStr);
            try
            {
                var cmd = new SQLiteCommand();
                PrepareCommand(cmd, connection, cmdText, parameters);
                return cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {
                LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + cmdText + "DB:" + connectionStr + ex); 
                throw;
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                    connection.Close();
            }
            return null;
        }

        /// <summary>
        /// 分页
        /// </summary>
        /// <param name="connectionStr"></param>
        /// <param name="recordCount"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="cmdText"></param>
        /// <param name="countText"></param>
        /// <param name="params"></param>
        /// <returns></returns>
        public static DataSet ExecutePager(string connectionStr, ref int recordCount, int pageIndex, int pageSize, string cmdText,
                                           string countText, params object[] @params)
        {
            if (recordCount < 0)
                recordCount = int.Parse(ExecuteScalar(connectionStr, countText, @params).ToString());
            var ds = new DataSet();
            var connection = GetSqLiteConnection(connectionStr);
            try
            {
                var command = new SQLiteCommand();
                PrepareCommand(command, connection, cmdText, @params);
                var da = new SQLiteDataAdapter(command);
                da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");
            }
            catch (Exception ex)
            {
                LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + cmdText + "DB:" + connectionStr + ex); 
                throw;
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                    connection.Close();
            }
            return ds;
        }

        public static Dictionary<string,string> ExecuteSql(string connectionStr,  string cmdText )
        {
             
            var ds = new Dictionary<string, string>();
            var connection = GetSqLiteConnection(connectionStr);
            connection.Open();
            try
            {
                var command = new SQLiteCommand();
                command.Connection = connection;
                command.CommandText = cmdText;
                SQLiteDataReader reader = command.ExecuteReader(); 
                while (reader.Read())
                {
                    if (!ds.ContainsKey(reader[0].ToString()))
                    {
                        ds.Add(reader[0].ToString(), reader[1].ToString()); 
                    }  
                }
                reader.Close();
            }
            catch (Exception ex)
            {
                LogHelper.JMS_Error_Log("SQLiteDbHelper_ExecuteSql出错:" + cmdText + "DB:" + connectionStr + ex);
                throw;
            }
            finally
            {
                if (connection.State == ConnectionState.Open)
                    connection.Close();
            }
            return ds;
        }
        /// <summary>
        /// 批量更新表记录
        /// </summary>
        /// <param name="connectionStr"></param>
        /// <param name="updateDataSet"></param>
        /// <param name="cmdText"></param>
        /// <returns></returns>
        public static bool UpdateDataSet(string connectionStr, DataSet updateDataSet, string cmdText)
        {
            var connection = GetSqLiteConnection(connectionStr);
            try
            {
                var sda = new SQLiteDataAdapter(cmdText, connection);
                sda.Update(updateDataSet);
                updateDataSet.AcceptChanges();
                return true;
            }
            catch (Exception ex)
            {
                LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + cmdText + "DB:" + connectionStr + ex); 
                return false;
            }
        }
        #region 参数转换

        /// <summary>
        /// 返回一个SQLiteParameter
        /// </summary>
        /// <param name="name">参数名字</param>
        /// <param name="type">参数类型</param>
        /// <param name="size">参数大小</param>
        /// <param name="param">参数值</param>
        /// <returns>SQLiteParameter的值</returns>
        public static SQLiteParameter MakeSqLiteParameter(string name, DbType type, int size, object param)
        {
            var parm = new SQLiteParameter(name, type, size)
            {
                Value = param
            };
            return parm;
        }

        public static SQLiteParameter MakeSqLiteParameter(string name, DbType type, object param)
        {
            var parm = new SQLiteParameter(name, type)
            {
                Value = param
            };
            return parm;
        }

        #endregion
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值