using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SQLite; using System.Reflection; /// /// SQLite数据库帮助类 /// public class SQLiteHelper { /// /// 数据库路径 /// private static readonly string m_DataSource = ConfigurationManager.AppSettings["Test"]; /// /// ConnectionString样例:Data Source=Test.db;Pooling=true;FailIfMissing=false /// private static readonly string m_ConnectionString; /// /// 静态构造函数,初始化连接字符串,检查数据库连接 /// static SQLiteHelper() { try { SQLiteConnectionStringBuilder connectionStringBuilder = new SQLiteConnectionStringBuilder { Version = 0, Pooling = true, FailIfMissing = false, DataSource = m_DataSource }; m_ConnectionString = connectionStringBuilder.ConnectionString; using (SQLiteConnection conn = new SQLiteConnection(m_ConnectionString)) { conn.Open(); } } catch { } } /// /// 获得连接对象 /// /// private static SQLiteConnection GetSQLiteConnection() { return new SQLiteConnection(m_ConnectionString); } /// /// 预备命令 /// /// /// /// /// private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] commandParameters) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Parameters.Clear(); cmd.Connection = conn; cmd.CommandText = cmdText; cmd.CommandType = CommandType.Text; cmd.CommandTimeout = 0; if (commandParameters != null) { foreach (object parm in commandParameters) cmd.Parameters.AddWithValue(string.Empty, parm); //for (int i = 0; i < p.Length; i++) // cmd.Parameters[i].Value = p[i]; } } /// /// 返回受影响的行数 /// /// 执行语句 /// 传入的参数 /// 返回受影响行数 public static int ExecuteNonQuery(string cmdText, params object[] commandParameters) { SQLiteCommand command = new SQLiteCommand(); using (SQLiteConnection connection = GetSQLiteConnection()) { PrepareCommand(command, connection, cmdText, commandParameters); return command.ExecuteNonQuery(); } } /// /// 返回表集合 /// /// 执行语句 /// 传入的参数 /// 返回DataSet public static DataSet ExecuteDataset(string cmdText, params object[] commandParameters) { DataSet ds = new DataSet(); SQLiteCommand command = new SQLiteCommand(); using (SQLiteConnection connection = GetSQLiteConnection()) { PrepareCommand(command, connection, cmdText, commandParameters); SQLiteDataAdapter da = new SQLiteDataAdapter(command); da.Fill(ds); } return ds; } /// /// 返回SqlDataReader对象 /// /// 执行语句 /// 传入的参数 /// 返回SQLiteDataReader public static SQLiteDataReader ExecuteReader(string cmdText, params object[] commandParameters) { SQLiteCommand command = new SQLiteCommand(); SQLiteConnection connection = GetSQLiteConnection(); try { PrepareCommand(command, connection, cmdText, commandParameters); SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection); return reader; } catch { connection.Close(); throw; } } /// /// 返回表第一行 /// /// 执行语句 /// 传入的参数 /// 返回:第一行 public static DataRow ExecuteDataRow(string cmdText, params object[] commandParameters) { DataSet ds = ExecuteDataset(cmdText, commandParameters); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) return ds.Tables[0].Rows[0]; return null; } /// /// 返回结果集中的第一行第一列,忽略其他行或列 /// /// 执行语句 /// 传入的参数 /// 返回:第一行第一列 public static object ExecuteScalar(string cmdText, params object[] commandParameters) { SQLiteCommand cmd = new SQLiteCommand(); using (SQLiteConnection connection = GetSQLiteConnection()) { PrepareCommand(cmd, connection, cmdText, commandParameters); return cmd.ExecuteScalar(); } } ///// ///// 获取表所有数据 ///// ///// 实体类型 ///// 表名 ///// 表所有数据 //public static List GetTableData(string tableName) where T : class //{ // List dataList = new List(); // try // { // using (SQLiteConnection context = new SQLiteConnection (new SQLiteConnection(m_ConnectionString))) // { // string sql = "select * from " + tableName; // dataList = context.ExecuteQuery(sql).ToList(); // context.SubmitChanges(); // } // } // catch { } // return dataList; //} ///// ///// 获取表数据 ///// ///// 实体类型 ///// sql语句 ///// 参数 ///// 表所有数据 //public static List GetTableData(string cmdText, params object[] parameter) where T : class //{ // List dataList = new List(); // try // { // using (SqliteDataContext context = new SqliteDataContext(new SQLiteConnection(m_ConnectionString))) // { // dataList = context.ExecuteQuery(cmdText, parameter).ToList(); // } // } // catch { } // return dataList; //} /// /// 插入表数据 /// /// 数据类型 /// 表名 /// 数据集合 /// true或false public static bool BatchInsert(string tableName, List dataList) { try { if (dataList != null && dataList.Count > 0) { var temp = dataList[0]; PropertyInfo[] propertyInfos = temp.GetType().GetProperties(); List propertyStrs = new List(); string propertyStr = ""; foreach (var propertyInfo in propertyInfos) { propertyStrs.Add(propertyInfo.Name); propertyStr = propertyStr + "@" + propertyInfo.Name + ","; } propertyStr = propertyStr.Remove(propertyStr.Length - 1); using (SQLiteConnection conn = new SQLiteConnection(m_ConnectionString)) { using (SQLiteCommand command = new SQLiteCommand(conn)) { command.Connection.Open(); using (SQLiteTransaction transaction = conn.BeginTransaction()) { command.Transaction = transaction; command.CommandText = "insert into " + tableName + " values(" + propertyStr + ")"; foreach (var needInsertData in dataList) { command.Parameters.Clear(); for (int i = 0; i < propertyStrs.Count; i++) { command.Parameters.AddWithValue("@" + propertyStrs[i], propertyInfos[i].GetValue(needInsertData, null)); } command.ExecuteNonQuery(); } transaction.Commit(); } } } } } catch (Exception ex) { return false; } return true; } /// /// 删除表数据 /// /// 表名 /// true或false public static bool DeleteTableData(string tableName) { try { using (SQLiteConnection conn = new SQLiteConnection(m_ConnectionString)) { using (SQLiteCommand command = new SQLiteCommand(conn)) { command.Connection.Open(); command.CommandText = "delete from " + tableName; command.ExecuteNonQuery(); } } } catch (Exception ex) { return false; } return true; } }