SQLite DBHelp
c#連接SQLite
SQLite這個精巧的小數(shù)據(jù)庫,無需安裝軟件,只需要一個System.Data.SQLite.DLL文件即可操作SQLite數(shù)據(jù)庫。SQLite是一個開源數(shù)據(jù)庫,現(xiàn)在已變得越來越流行,它的體積很小,被廣泛應(yīng)用于各種不同類型的應(yīng)用中。SQLite已經(jīng)是世界上布署得最廣泛的SQL數(shù)據(jù)庫引擎,被用在無以計數(shù)的桌面電腦應(yīng)用中,還有消費電子設(shè)備中,如移動電話、掌上電腦和MP3播放器等。SQLite的源碼就放在公有領(lǐng)域(即WikiPedia的public domain)中。
本代碼為網(wǎng)上收錄的sqlite數(shù)據(jù)庫操作類。
代碼正文
Codeusing System;using System.Collections.Generic;using System.Text;using System.Web;using System.Configuration;using System.Data;using System.Data.SQLite;namespace DAL{public class Sqlite{/// <summary>/// 獲得連接對象/// </summary>/// <returns></returns>public static SQLiteConnection GetSQLiteConnection(){return new SQLiteConnection("Data Source=" + System.Web.HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["db"].ToString()));}private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, string cmdText, params object[] p){if (conn.State != ConnectionState.Open)conn.Open();cmd.Parameters.Clear();cmd.Connection = conn;cmd.CommandText = cmdText;cmd.CommandType = CommandType.Text;cmd.CommandTimeout = 30;if (p != null){foreach (object parm in p)cmd.Parameters.AddWithValue(string.Empty, parm);//for (int i = 0; i < p.Length; i++)// cmd.Parameters[i].Value = p[i];}}public static DataSet ExecuteDataset(string cmdText, params object[] p){DataSet ds = new DataSet();SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);SQLiteDataAdapter da = new SQLiteDataAdapter(command);da.Fill(ds);}return ds;}public static DataRow ExecuteDataRow(string cmdText, params object[] p){DataSet ds = ExecuteDataset(cmdText, p);if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)return ds.Tables[0].Rows[0];return null;}/// <summary>/// 返回受影響的行數(shù)/// </summary>/// <param name="cmdText">a</param>/// <param name="commandParameters">傳入的參數(shù)</param>/// <returns></returns>public static int ExecuteNonQuery(string cmdText, params object[] p){SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);return command.ExecuteNonQuery();}}/// <summary>/// 返回SqlDataReader對象/// </summary>/// <param name="cmdText"></param>/// <param name="commandParameters">傳入的參數(shù)</param>/// <returns></returns>public static SQLiteDataReader ExecuteReader(string cmdText, params object[] p){SQLiteCommand command = new SQLiteCommand();SQLiteConnection connection = GetSQLiteConnection();try{PrepareCommand(command, connection, cmdText, p);SQLiteDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);return reader;}catch{connection.Close();throw;}}/// <summary>/// 返回結(jié)果集中的第一行第一列,忽略其他行或列/// </summary>/// <param name="cmdText"></param>/// <param name="commandParameters">傳入的參數(shù)</param>/// <returns></returns>public static object ExecuteScalar(string cmdText, params object[] p){SQLiteCommand cmd = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(cmd, connection, cmdText, p);return cmd.ExecuteScalar();}}/// <summary>/// 分頁/// </summary>/// <param name="recordCount"></param>/// <param name="pageIndex"></param>/// <param name="pageSize"></param>/// <param name="cmdText"></param>/// <param name="countText"></param>/// <param name="p"></param>/// <returns></returns>public static DataSet ExecutePager(ref int recordCount, int pageIndex, int pageSize, string cmdText, string countText, params object[] p){if (recordCount < 0)recordCount = int.Parse(ExecuteScalar(countText, p).ToString());DataSet ds = new DataSet();SQLiteCommand command = new SQLiteCommand();using (SQLiteConnection connection = GetSQLiteConnection()){PrepareCommand(command, connection, cmdText, p);SQLiteDataAdapter da = new SQLiteDataAdapter(command);da.Fill(ds, (pageIndex - 1) * pageSize, pageSize, "result");}return ds;}}}?
System.Data.SQLite數(shù)據(jù)庫通用類
針對對數(shù)據(jù)庫的操作情況,分為以下幾種情況:
創(chuàng)建數(shù)據(jù)庫文件;
返回DataTable;
返回DataReader;
執(zhí)行增刪改,返回受影響的行數(shù);
執(zhí)行查詢,返回第一行第一列(通常用于帶有行函數(shù)的查詢,如SUM/AVG/COUNT等);
返回庫中所有的表;
因為在System.Data.SQLite中不存在存儲過程,所以所有的操作都是基于文本的SQL語句,為了避免SQL注入,所以使用了參數(shù)化的SQL語句,這個數(shù)據(jù)庫通用類如下:
Codeusing System; using System.Data; using System.Data.Common; using System.Data.SQLite;namespace SQLiteQueryBrowser {/// <summary>/// 說明:這是一個針對System.Data.SQLite的數(shù)據(jù)庫常規(guī)操作封裝的通用類。/// 作者:zhoufoxcn(周公)/// 日期:2010-04-01/// Blog:http://zhoufoxcn.blog.51cto.com or http://blog.csdn.net/zhoufoxcn/// Version:0.1/// </summary>public class SQLiteDBHelper{private string connectionString = string.Empty;/// <summary>/// 構(gòu)造函數(shù)/// </summary>/// <param name="dbPath">SQLite數(shù)據(jù)庫文件路徑</param>public SQLiteDBHelper(string dbPath){this.connectionString = "Data Source=" + dbPath;}/// <summary>/// 創(chuàng)建SQLite數(shù)據(jù)庫文件/// </summary>/// <param name="dbPath">要創(chuàng)建的SQLite數(shù)據(jù)庫文件路徑</param>public static void CreateDB(string dbPath){using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + dbPath)){connection.Open();using (SQLiteCommand command = new SQLiteCommand(connection)){command.CommandText = "CREATE TABLE Demo(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE)";command.ExecuteNonQuery();command.CommandText = "DROP TABLE Demo";command.ExecuteNonQuery();}}}/// <summary>/// 對SQLite數(shù)據(jù)庫執(zhí)行增刪改操作,返回受影響的行數(shù)。/// </summary>/// <param name="sql">要執(zhí)行的增刪改的SQL語句</param>/// <param name="parameters">執(zhí)行增刪改語句所需要的參數(shù),參數(shù)必須以它們在SQL語句中的順序為準(zhǔn)</param>/// <returns></returns>public int ExecuteNonQuery(string sql, SQLiteParameter[] parameters){int affectedRows = 0;using (SQLiteConnection connection = new SQLiteConnection(connectionString)){connection.Open();using (DbTransaction transaction = connection.BeginTransaction()){using (SQLiteCommand command = new SQLiteCommand(connection)){command.CommandText = sql;if (parameters != null){command.Parameters.AddRange(parameters);}affectedRows = command.ExecuteNonQuery();}transaction.Commit();}}return affectedRows;}/// <summary>/// 執(zhí)行一個查詢語句,返回一個關(guān)聯(lián)的SQLiteDataReader實例/// </summary>/// <param name="sql">要執(zhí)行的查詢語句</param>/// <param name="parameters">執(zhí)行SQL查詢語句所需要的參數(shù),參數(shù)必須以它們在SQL語句中的順序為準(zhǔn)</param>/// <returns></returns>public SQLiteDataReader ExecuteReader(string sql, SQLiteParameter[] parameters){SQLiteConnection connection = new SQLiteConnection(connectionString);SQLiteCommand command = new SQLiteCommand(sql, connection);if (parameters != null){command.Parameters.AddRange(parameters);}connection.Open();return command.ExecuteReader(CommandBehavior.CloseConnection);}/// <summary>/// 執(zhí)行一個查詢語句,返回一個包含查詢結(jié)果的DataTable/// </summary>/// <param name="sql">要執(zhí)行的查詢語句</param>/// <param name="parameters">執(zhí)行SQL查詢語句所需要的參數(shù),參數(shù)必須以它們在SQL語句中的順序為準(zhǔn)</param>/// <returns></returns>public DataTable ExecuteDataTable(string sql, SQLiteParameter[] parameters){using (SQLiteConnection connection = new SQLiteConnection(connectionString)){using (SQLiteCommand command = new SQLiteCommand(sql, connection)){if (parameters != null){command.Parameters.AddRange(parameters);}SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);DataTable data = new DataTable();adapter.Fill(data);return data;}}}/// <summary>/// 執(zhí)行一個查詢語句,返回查詢結(jié)果的第一行第一列/// </summary>/// <param name="sql">要執(zhí)行的查詢語句</param>/// <param name="parameters">執(zhí)行SQL查詢語句所需要的參數(shù),參數(shù)必須以它們在SQL語句中的順序為準(zhǔn)</param>/// <returns></returns>public Object ExecuteScalar(string sql, SQLiteParameter[] parameters){using (SQLiteConnection connection = new SQLiteConnection(connectionString)){using (SQLiteCommand command = new SQLiteCommand(sql, connection)){if (parameters != null){command.Parameters.AddRange(parameters);}SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);DataTable data = new DataTable();adapter.Fill(data);return data;}}}/// <summary>/// 查詢數(shù)據(jù)庫中的所有數(shù)據(jù)類型信息/// </summary>/// <returns></returns>public DataTable GetSchema(){using (SQLiteConnection connection = new SQLiteConnection(connectionString)){connection.Open();DataTable data=connection.GetSchema("TABLES");connection.Close();//foreach (DataColumn column in data.Columns)//{// Console.WriteLine(column.ColumnName);//}return data;}}} }?
?
轉(zhuǎn)載于:https://www.cnblogs.com/sczw-maqing/p/3259525.html
總結(jié)
以上是生活随笔為你收集整理的SQLite DBHelp的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 屌丝程序员的那些事(一)-毕业那年
- 下一篇: HTTP 和 HTTPS 协议