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

posted @ 2020-09-09 14:04  willamyao  阅读(1397)  评论(0编辑  收藏  举报