using NLog;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Linq;
using System.Text;
namespace POSV.Utils
{
public class SqliteUtils
{
private static readonly string connectionString;
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
static SqliteUtils()
{
connectionString = Global.Instance.SQLiteConnectionString;
}
///
/// 执行简单SQL语句
///
/// SQL语句
/// 影响的记录数
public static bool Execute(string sql)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
connection.Open();
using (SQLiteCommand cmd = new SQLiteCommand(sql , connection))
{
bool result = true;
try
{
cmd.ExecuteNonQuery();
}
catch (SQLiteException sqlex)
{
result = false;
throw new Exception(sqlex.Message);
}
finally
{
connection.Close();
}
return result;
}
}
}
public static void ExecuteTransaction(ConcurrentQueue lists)
{
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
using (var cmd = new SQLiteCommand(connection))
{
using (var transaction = connection.BeginTransaction())
{
string sql1 = "";
try
{
string sql;
while (lists.TryDequeue(out sql))
{
try
{
sql1 = sql;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
logger.Info(ex.Message);
logger.Info("插入失败:"+ sql);
}
}
transaction.Commit();
}
catch (SQLiteException E)
{
logger.Error(sql1);
transaction.Rollback();
throw new Exception(E.Message);
}
finally
{
connection.Close();
}
}
}
}
}
///
/// 执行过程抛出异常
///
///
public static void ExecuteTransaction2(ConcurrentQueue lists)
{
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
using (var cmd = new SQLiteCommand(connection))
{
using (var transaction = connection.BeginTransaction())
{
string sql1 = "";
try
{
string sql;
while (lists.TryDequeue(out sql))
{
try
{
sql1 = sql;
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
catch
{
throw new Exception("SQL执行异常:"+ sql);
}
}
transaction.Commit();
}
catch (SQLiteException E)
{
logger.Error(sql1);
transaction.Rollback();
throw new Exception(E.Message);
}
finally
{
connection.Close();
}
}
}
}
}
public static DataSet Query(string sql , string tableName)
{
using (SQLiteConnection connection = new SQLiteConnection(connectionString))
{
DataSet data = new DataSet();
try
{
connection.Open();
using(SQLiteDataAdapter command = new SQLiteDataAdapter(sql, connection))
{
command.Fill(data , tableName);
}
}
catch (SQLiteException ex)
{
throw new Exception(ex.Message);
}
finally
{
connection.Close();
}
return data;
}
}
}
}