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; } } } } } } }