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;
}
}