public class SQliteDb { /// <summary> /// 获取表所有数据 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="sql">sql语句</param> /// <param name="connectionString"></param> /// <returns>表所有数据</returns> public static List<T> GetListData<T>(string sql, string connectionString) where T : class { var connstring = connectionString; var sqLiteb = new SQLiteConnectionStringBuilder { DataSource = connstring }; var dataList = new List<T>(); using (var con = new SQLiteConnection(sqLiteb.ToString())) { try { con.Open(); dataList = con.Query<T>(sql).ToList(); } catch (Exception ex) { LogHelper.WriteErrLog("Sqlite异常:", ex); } finally { con.Close(); } } return dataList; } /// <summary> /// 按条件查询 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="sql"></param> /// <param name="param"></param> /// <param name="connectionString"></param> /// <returns></returns> public static List<T> GetListData<T>(string sql, object param, string connectionString) where T : class { var connstring = connectionString; var sqLiteb = new SQLiteConnectionStringBuilder { DataSource = connstring }; var dataList = new List<T>(); using (var con = new SQLiteConnection(sqLiteb.ToString())) { try { con.Open(); dataList = con.Query<T>(sql, param).ToList(); } catch (Exception ex) { LogHelper.WriteErrLog("Sqlite异常:", ex); } finally { con.Close(); } } return dataList; } /// <summary> /// 查询单个结果 /// </summary> /// <param name="sql"></param> /// <param name="connString"></param> /// <returns></returns> public static async Task<object> GetSingleRez(string sql, string connString) { var sqLiteb = new SQLiteConnectionStringBuilder { DataSource = connString }; var objRez = new object(); await using (var con = new SQLiteConnection(sqLiteb.ToString())) { try { con.Open(); objRez = await con.ExecuteScalarAsync(sql); } catch (Exception ex) { LogHelper.WriteErrLog("Sqlite异常:", ex); } finally { con.Close(); } } return objRez; } /// <summary> /// 执行Sql返回行数 /// </summary> /// <param name="sql"></param> /// <param name="connectionString"></param> /// <returns></returns> public static int ExcuteSql(string sql, string connectionString) { var connstring = connectionString; var sqLiteb = new SQLiteConnectionStringBuilder { DataSource = connstring }; var rez = -1; using (var con = new SQLiteConnection(sqLiteb.ToString())) { try { con.Open(); rez = con.Execute(sql); } catch (Exception ex) { LogHelper.WriteErrLog("Sqlite异常:", ex); } finally { con.Close(); } } return rez; } /// <summary> /// 带参数执行SQL /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <param name="connectionString"></param> /// <returns></returns> public static int ExcuteSql(string sql, object param, string connectionString) { var connstring = connectionString; var sqLiteb = new SQLiteConnectionStringBuilder { DataSource = connstring }; var rez = -1; using (var con = new SQLiteConnection(sqLiteb.ToString())) { try { con.Open(); rez = con.Execute(sql, param); } catch (Exception ex) { LogHelper.WriteErrLog("Sqlite异常:", ex); } finally { con.Close(); } } return rez; } /// <summary> /// 批量更新、删除和插入数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="connectionString"></param> /// <param name="sql"></param> /// <param name="lt"></param> /// <returns></returns> public static async Task<bool> ExcuteBatch<T>(string connectionString, string sql, IEnumerable<T> lt) where T : class { var connstring = connectionString; var sqLiteb = new SQLiteConnectionStringBuilder { DataSource = connstring }; var flag = false; await using (var con = new SQLiteConnection(sqLiteb.ToString())) { SQLiteTransaction transaction =null; try { con.Open(); transaction = con.BeginTransaction(); var rez = await con.ExecuteAsync(sql, lt, transaction); transaction.Commit(); flag = rez == lt.Count(); } #pragma warning disable CA1031 // Do not catch general exception types catch (Exception ex) { transaction?.Rollback(); LogHelper.WriteErrLog("Sqlite异常:", ex); } #pragma warning restore CA1031 // Do not catch general exception types finally { con.Close(); } } return flag; } /// <summary> /// 单个更新、插入数据 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="connectionString"></param> /// <param name="sql"></param> /// <param name="model"></param> /// <returns></returns> public static async Task<int> ExcuteSql<T>(string connectionString, string sql, T model) { var connstring = connectionString; var sqLiteb = new SQLiteConnectionStringBuilder { DataSource = connstring }; var rez = 0; await using (var con = new SQLiteConnection(sqLiteb.ToString())) { try { con.Open(); rez = await con.ExecuteAsync(sql, model); } catch (Exception ex) { LogHelper.WriteErrLog("Sqlite未处理异常:", ex); } finally { con.Close(); } } return rez; } }
因Sqlite不具备并发,同一时间只能一个线程操作数据库
public Task<int> Inser (Tmodel)
{
Task<int> rez;
lock (LockObj)
{
rez = SQliteDbContext.ExcuteSql<T>(_sqlitePath, InsertSql, model);
}
return rez;
}
private static readonly object LockObj = new object();