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();