using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Text;
namespace mynamespace
{
public static class SQLiteDbHelper
{
private static SQLiteConnection GetSqLiteConnection(string connectionStr)
{
return new SQLiteConnection(connectionStr);
}
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText,
params object[] cmdParams)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Parameters.Clear();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 10;
if (cmdParams != null)
{
foreach (SQLiteParameter parameter in cmdParams)
{
if ((parameter.Direction == ParameterDirection.InputOutput ||
parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
/// <summary>
/// 执行语句返回DataSet
/// </summary>
/// <param name="connectionStr">数据库连接信息</param>
/// <param name="cmdText">执行语句</param>
/// <param name="params">参数</param>
/// <returns></returns>
public static DataSet ExecuteDataset(string connectionStr, string cmdText, params object[] @params)
{
var ds = new DataSet();
var connection = GetSqLiteConnection(connectionStr);
try
{
var command = new SQLiteCommand();
PrepareCommand(command, connection, cmdText, @params);
var da = new SQLiteDataAdapter(command);
da.Fill(ds);
}
catch (Exception ex)
{
LogHelper.JMS_Error_Log("SQLiteDbHelper_ExecuteDataset_SQL出错:" + cmdText + "DB:" + connectionStr+ ex);
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
return ds;
}
/// <summary>
/// 执行语句返回影响行数
/// </summary>
/// <param name="connectionStr">数据库连接信息</param>
/// <param name="cmdText">执行语句</param>
/// <param name="params">参数</param>
/// <returns></returns>
public static DataRow ExecuteDataRow(string connectionStr, string cmdText, params object[] @params)
{
var ds = ExecuteDataset(connectionStr, cmdText, @params);
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
return ds.Tables[0].Rows[0];
return null;
}
/// <summary>
/// 执行SQL 返回受影响的行数
/// </summary>
/// <param name="connectionStr">connectionStr</param>
/// <param name="cmdText">Command Text</param>
/// <param name="parameters">传入的参数</param>
/// <returns></returns>
public static int ExecuteNonQuery(string connectionStr, string cmdText, params object[] parameters)
{
var connection = GetSqLiteConnection(connectionStr);
try
{
var command = new SQLiteCommand();
PrepareCommand(command, connection, cmdText, parameters);
return command.ExecuteNonQuery();
}
catch (Exception ex)
{
LogHelper.JMS_Error_Log("SQLiteDbHelper_ExecuteNonQuery_SQL出错:" + cmdText + "DB:" + connectionStr + ex);
return -999;
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
}
/// <summary>
/// 在同一事物里批量执行SQL
/// </summary>
/// <param name="connectionStr">connectionStr</param>
/// <param name="sqlList">SQL集合</param>
/// <returns></returns>
public static bool ExcuteBatchSQL(string connectionStr, List<string> sqlList)
{
if (sqlList.Count == 0)
return false;
var connection = GetSqLiteConnection(connectionStr);
connection.Open();
var transaction = connection.BeginTransaction();
try
{
foreach (string cmdText in sqlList)
{
var command = new SQLiteCommand();
PrepareCommand(command, connection, cmdText, null);
command.ExecuteNonQuery();
}
transaction.Commit();
return true;
}
catch (Exception ex)
{
transaction.Rollback();
var sb = new StringBuilder();
foreach (var sql in sqlList)
{
sb.AppendLine(sql + ";");
}
LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + sb.ToString() + "DB:" + connectionStr + ex);
return false;
}
finally
{
if (connection.State == ConnectionState.Open)
{
connection.Close();
}
}
}
/// <summary>
/// 返回SqlDataReader对象
/// </summary>
/// <param name="connectionStr">数据库连接信息</param>
/// <param name="cmdText">执行SQL</param>
/// <param name="parameters">传入的参数</param>
/// <returns></returns>
public static SQLiteDataReader ExecuteReader(string connectionStr, string cmdText, params object[] parameters)
{
var command = new SQLiteCommand();
var connection = GetSqLiteConnection(connectionStr);
try
{
PrepareCommand(command, connection, cmdText, parameters);
var reader = command.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
catch (Exception ex)
{
connection.Close();
LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + cmdText + "DB:" + connectionStr + ex);
throw;
}
}
/// <summary>
/// 返回结果集中的第一行第一列,忽略其他行或列
/// </summary>
/// <param name="connectionStr">connectionStr</param>
/// <param name="cmdText">Command Text</param>
/// <param name="parameters">传入的参数</param>
/// <returns></returns>
public static object ExecuteScalar(string connectionStr, string cmdText, params object[] parameters)
{
var connection = GetSqLiteConnection(connectionStr);
try
{
var cmd = new SQLiteCommand();
PrepareCommand(cmd, connection, cmdText, parameters);
return cmd.ExecuteScalar();
}
catch (Exception ex)
{
LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + cmdText + "DB:" + connectionStr + ex);
throw;
}
finally
{
if (connection.State == ConnectionState.Open)
connection.Close();
}
return null;
}
/// <summary>
/// 分页
/// </summary>
/// <param name="connectionStr"></param>
/// <param name="recordCount"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <param name="cmdText"></param>
/// <param name="countText"></param>
/// <param name="params"></param>
/// <returns></returns>
public static DataSet ExecutePager(string connectionStr, ref int recordCount, int pageIndex, int pageSize, string cmdText,
string countText, params object[] @params)
{
if (recordCount < 0)
recordCount = int.Parse(ExecuteScalar(connectionStr, countText, @params).ToString());
var ds = new DataSet();
var connection = GetSqLiteConnection(connectionStr);
try
{
var command = new SQLiteCommand();
PrepareCommand(command, connection, cmdText, @params);
var da = new SQLiteDataAdapter(command);
da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");
}
catch (Exception ex)
{
LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + cmdText + "DB:" + connectionStr + ex);
throw;
}
finally
{
if (connection.State == ConnectionState.Open)
connection.Close();
}
return ds;
}
public static Dictionary<string,string> ExecuteSql(string connectionStr, string cmdText )
{
var ds = new Dictionary<string, string>();
var connection = GetSqLiteConnection(connectionStr);
connection.Open();
try
{
var command = new SQLiteCommand();
command.Connection = connection;
command.CommandText = cmdText;
SQLiteDataReader reader = command.ExecuteReader();
while (reader.Read())
{
if (!ds.ContainsKey(reader[0].ToString()))
{
ds.Add(reader[0].ToString(), reader[1].ToString());
}
}
reader.Close();
}
catch (Exception ex)
{
LogHelper.JMS_Error_Log("SQLiteDbHelper_ExecuteSql出错:" + cmdText + "DB:" + connectionStr + ex);
throw;
}
finally
{
if (connection.State == ConnectionState.Open)
connection.Close();
}
return ds;
}
/// <summary>
/// 批量更新表记录
/// </summary>
/// <param name="connectionStr"></param>
/// <param name="updateDataSet"></param>
/// <param name="cmdText"></param>
/// <returns></returns>
public static bool UpdateDataSet(string connectionStr, DataSet updateDataSet, string cmdText)
{
var connection = GetSqLiteConnection(connectionStr);
try
{
var sda = new SQLiteDataAdapter(cmdText, connection);
sda.Update(updateDataSet);
updateDataSet.AcceptChanges();
return true;
}
catch (Exception ex)
{
LogHelper.JMS_Error_Log("SQLiteDbHelper_ExcuteBatchSQL_SQL出错:" + cmdText + "DB:" + connectionStr + ex);
return false;
}
}
#region 参数转换
/// <summary>
/// 返回一个SQLiteParameter
/// </summary>
/// <param name="name">参数名字</param>
/// <param name="type">参数类型</param>
/// <param name="size">参数大小</param>
/// <param name="param">参数值</param>
/// <returns>SQLiteParameter的值</returns>
public static SQLiteParameter MakeSqLiteParameter(string name, DbType type, int size, object param)
{
var parm = new SQLiteParameter(name, type, size)
{
Value = param
};
return parm;
}
public static SQLiteParameter MakeSqLiteParameter(string name, DbType type, object param)
{
var parm = new SQLiteParameter(name, type)
{
Value = param
};
return parm;
}
#endregion
}
}