using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web;
namespace JiangSu.cs
{
public class SQLiteHelper
{
private static string _connStr = null;
private static bool _isLoadDriver = false;
///
/// ConnectionString样例:Datasource=Test.db3;Pooling=true;FailIfMissing=false
///
public static string ConnectionString
{
get
{
if (string.IsNullOrEmpty(_connStr))
{
//_connStr = string.Format("Data Source={0};Version={1};", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources\\XiAn.sqlite"), 3);
_connStr = string.Format("Data Source={0};Integrated Security=True;Max Pool Size=64", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data\\js.db"));
}
return _connStr;
}
}
private static void LoadDrivers(SQLiteConnection conn)
{
if (!_isLoadDriver)
{
string spatialitePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources\\sqlite");
Environment.SetEnvironmentVariable("PATH", spatialitePath + ";" + Environment.GetEnvironmentVariable("PATH"));
LogOut.Info(spatialitePath);
_isLoadDriver = true;
}
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
conn.LoadExtension("mod_spatialite.dll");
}
///
/// 查询数据库中的所有数据类型信息。
///
public DataTable GetSchema()
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
return conn.GetSchema("TABLES");
}
}
private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, params SQLiteParameter[] parameters)
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
if (parameters != null && parameters.Length > 0)
{
cmd.Parameters.AddRange(parameters);
}
}
public static DataSet ExecuteQuery(string cmdText, params SQLiteParameter[] parameters)
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
using (SQLiteCommand cmd = new SQLiteCommand(cmdText, conn))
{
PrepareCommand(cmd, conn, parameters);
DataSet ds = new DataSet();
using (SQLiteDataAdapter da = new SQLiteDataAdapter(cmd))
{
da.Fill(ds);
}
return ds;
}
}
}
public static DataTable GetDataTable(string cmdText, params SQLiteParameter[] parameters)
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
//LoadDrivers(conn);
using (SQLiteCommand cmd = new SQLiteCommand(cmdText, conn))
{
PrepareCommand(cmd, conn, parameters);
DataTable dt = new DataTable();
using (SQLiteDataAdapter da = new SQLiteDataAdapter(cmd))
{
da.Fill(dt);
}
return dt;
}
}
}
public static int ExecuteNonQuery(string cmdText, params SQLiteParameter[] parameters)
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
using (SQLiteCommand cmd = new SQLiteCommand(cmdText, conn))
{
PrepareCommand(cmd, conn, parameters);
return cmd.ExecuteNonQuery();
}
}
}
public static SQLiteDataReader ExecuteReader(string cmdText, params SQLiteParameter[] parameters)
{
SQLiteConnection conn = new SQLiteConnection(ConnectionString);
using (SQLiteCommand cmd = new SQLiteCommand(cmdText, conn))
{
PrepareCommand(cmd, conn, parameters);
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
}
public static object ExecuteScalar(string cmdText, params SQLiteParameter[] parameters)
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
using (SQLiteCommand cmd = new SQLiteCommand(cmdText, conn))
{
PrepareCommand(cmd, conn, parameters);
return cmd.ExecuteScalar();
}
}
}
///
/// 批量处理数据操作语句。
///
public void ExecuteNonQueryBatch(List> list)
{
using (SQLiteConnection conn = new SQLiteConnection(ConnectionString))
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
using (SQLiteTransaction tran = conn.BeginTransaction())
{
using (SQLiteCommand cmd = new SQLiteCommand(conn))
{
try
{
foreach (var item in list)
{
cmd.CommandText = item.Key;
if (item.Value != null)
{
cmd.Parameters.AddRange(item.Value);
}
cmd.ExecuteNonQuery();
}
tran.Commit();
}
catch (Exception ex)
{
tran.Rollback();
throw ex;
}
}
}
}
}
}
}