• SQlite+dapper操作


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

  • 相关阅读:
    根据不同的状态查询错误
    myeclipse修改了安装目录名字打不开解决方法
    前端c标签foreach传值给后台
    Could not find result map java.lang.Integer] with root cause
    the import XXXX cannot be resolved 解决方法
    当我的url请求会变成jsp页面路径时的解决办法
    当项目启动很久一直超时怎么办?
    前端里面的变量名字多一个“;”会有这么多的区别
    java String.format()的问题
    String.format
  • 原文地址:https://www.cnblogs.com/robertyao/p/13638414.html
Copyright © 2020-2023  润新知