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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM