SQLite 是一個輕量級別數據庫, 是遵守 ACID 的關系型數據庫管理系統,它包含在一個相對小的 C 庫中。它是 D.RichardHipp 建立的公有領域項目。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百 K 的內存就夠了。它能夠支持 Windows/Linux/Unix 等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java 等,還有 ODBC 接口,同樣比起 Mysql、PostgreSQL 這兩款開源的世界著名數據庫管理系統來講,它的處理速度比他們都快。
SQLite 官網:http://www.sqlite.org/
項目中使用了類庫,下載地址:http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki
下載好后,在項目右鍵添加引用即可。
代碼:
using System; using System.Configuration; using System.Data; using System.Data.SQLite; namespace Blog.Data { /// <summary> /// SQLiteHelper /// </summary> public class SQLiteHelper : IDisposable { #region 私有字段.. private SQLiteConnection _connection = null; private SQLiteTransaction _transaction = null; private bool _transacted = false; private string _connectionString = String.Empty; private bool _disposed = false; private bool _autoCommit = false; #endregion #region 構造函數... /// <summary> /// 使用默認的連接字符串初始化 <see cref="SQLiteHelper"/> 類的新實例。 /// </summary> public SQLiteHelper() : this(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString) { } /// <summary> /// 初始化 SQLiteHelper /// </summary> /// <param name="connectionString">數據庫連接字符串。</param> public SQLiteHelper(string connectionString) { _connectionString = connectionString; _connection = new SQLiteConnection(_connectionString); _connection.Commit += new SQLiteCommitHandler(Transaction_Commit); _connection.RollBack += new EventHandler(Transaction_RollBack); } /// <summary> /// SQLiteHelper 析構函數 /// </summary> ~SQLiteHelper() { Dispose(false); } #endregion #region 方法... /// <summary> /// 打開數據庫連接。 /// </summary> private void Open() { if (_connection.State == ConnectionState.Closed) { _connection.Open(); } } /// <summary> /// 關閉數據庫連接。 /// </summary> private void Close() { if (_connection.State != ConnectionState.Closed) { if (_transacted && _autoCommit) { Commit(); } _connection.Close(); } } /// <summary> /// 開始數據庫事務。 /// </summary> public void BeginTransaction() { _connection.BeginTransaction(); _transacted = true; } /// <summary> /// 開始數據庫事務。 /// </summary> /// <param name="isolationLevel">事務鎖級別。</param> public void BeginTransaction(IsolationLevel isolationLevel) { _connection.BeginTransaction(isolationLevel); _transacted = true; } /// <summary> /// 提交當前掛起的事務。 /// </summary> public void Commit() { if (_transacted) { _transaction.Commit(); _transacted = false; } } /// <summary> /// 回滾當前掛起的事務。 /// </summary> public void Rollback() { if (_transacted) { _transaction.Rollback(); _transacted = false; } } /// <summary> /// 對連接執行 Transact-SQL 語句並返回受影響的行數。 /// </summary> /// <param name="commandText">SQL 語句</param> /// <returns>返回受影響的行數。</returns> public int ExecuteNonQuery(string commandText) { int result = 0; Open(); using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText)) { result = sqliteCommand.ExecuteNonQuery(); } Close(); return result; } /// <summary> /// 對連接執行 Transact-SQL 語句並返回受影響的行數。 /// </summary> /// <param name="commandText">SQL 語句</param> /// <param name="parmeters">要添加的 <see cref="SQLiteParameter"/> 值。</param> /// <returns>返回受影響的行數。</returns> public int ExecuteNonQuery(string commandText, SQLiteParameter[] parmeters) { int result = 0; Open(); using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText)) { sqliteCommand.Parameters.AddRange(parmeters); result = sqliteCommand.ExecuteNonQuery(); } Close(); return result; } /// <summary> /// 執行查詢,並返回查詢所返回的結果集中第一行的第一列。忽略其他列或行。 /// </summary> /// <param name="commandText">用於查詢的 Sql 語句。</param> /// <returns>結果集中第一行的第一列;如果結果集為空,則為空引用。返回的最大字符數為 2033 個字符。</returns> public object ExecuteScalar(string commandText) { object result = null; Open(); using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText)) { result = sqliteCommand.ExecuteScalar(); } Close(); return result; } /// <summary> /// 執行查詢,並返回查詢所返回的結果集中第一行的第一列。忽略其他列或行。 /// </summary> /// <param name="commandText">用於查詢的 Sql 語句。</param> /// <param name="parmeters">要添加的 <see cref="SQLiteParameter"/> 值。</param> /// <returns>結果集中第一行的第一列;如果結果集為空,則為空引用。返回的最大字符數為 2033 個字符。</returns> public object ExecuteScalar(string commandText, SQLiteParameter[] parmeters) { object result = null; Open(); using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText)) { sqliteCommand.Parameters.AddRange(parmeters); result = sqliteCommand.ExecuteScalar(); } Close(); return result; } /// <summary> /// 查詢數據並返回一個 <see cref="DataSet"/>。 /// </summary> /// <param name="commandText">用於查詢的 Sql 語句。</param> /// <returns>返回一個 <see cref="DataSet"/> 對象。</returns> public DataSet GetDataSet(string commandText) { return GetDataSet(commandText, string.Empty); } /// <summary> /// 查詢數據並返回一個 <see cref="DataSet"/>。 /// </summary> /// <param name="commandText">用於查詢的 Sql 語句。</param> /// <param name="tableName">用於表映射的源表的名稱。</param> /// <returns>返回一個 <see cref="DataSet"/> 對象。</returns> public DataSet GetDataSet(string commandText, string tableName) { DataSet dataSet = new DataSet(); Open(); using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText, _connection)) { using (SQLiteDataAdapter sqlAdapter = new SQLiteDataAdapter(sqliteCommand)) { if (string.Empty.Equals(tableName)) { sqlAdapter.Fill(dataSet); } else { sqlAdapter.Fill(dataSet, tableName); } } } Close(); return dataSet; } /// <summary> /// 查詢數據並返回一個 <see cref="DataSet"/>。 /// </summary> /// <param name="commandText">用於查詢的 Sql 語句。</param> /// <param name="sqlCommand"><see cref="SQLiteCommand"/> 對象。</param> /// <returns>返回一個 <see cref="DataSet"/> 對象。</returns> public DataSet GetDataSet(string commandText, out SQLiteCommand sqlCommand) { return GetDataSet(commandText, string.Empty, out sqlCommand); } /// <summary> /// 查詢數據並返回一個 <see cref="DataSet"/>。 /// </summary> /// <param name="commandText">用於查詢的 Sql 語句。</param> /// <param name="tableName">用於表映射的源表的名稱。</param> /// <param name="sqlCommand"><see cref="SQLiteCommand"/> 對象。</param> /// <returns>返回一個 <see cref="DataSet"/> 對象。</returns> public DataSet GetDataSet(string commandText, string tableName, out SQLiteCommand sqlCommand) { DataSet dataSet = new DataSet(); Open(); SQLiteCommand sqliteCommand = new SQLiteCommand(commandText, _connection); using (SQLiteDataAdapter sqlAdapter = new SQLiteDataAdapter(sqliteCommand)) { sqlAdapter.Fill(dataSet); } sqlCommand = sqliteCommand; Close(); return dataSet; } /// <summary> /// 為具有指定 <see cref="DataTable"/> 名稱的 <see cref="DataSet"/> 更新數據。 /// </summary> /// <param name="dataSet">用於更新數據源的 <see cref="DataSet"/>。</param> /// <param name="sqlCommand">指定的一個 <see cref="SQLiteCommand"/> 對象。</param> /// <returns><see cref="DataSet"/> 中成功更新的行數。</returns> public int Update(DataSet dataSet, ref SQLiteCommand sqlCommand) { return Update(dataSet, string.Empty, ref sqlCommand); } /// <summary> /// 為具有指定 <see cref="DataTable"/> 名稱的 <see cref="DataSet"/> 更新數據。 /// </summary> /// <param name="dataSet">用於更新數據源的 <see cref="DataSet"/>。</param> /// <param name="tableName">用於表映射的源表的名稱。</param> /// <param name="sqlCommand">指定的一個 <see cref="SQLiteCommand"/> 對象。</param> /// <returns><see cref="DataSet"/> 中成功更新的行數。</returns> public int Update(DataSet dataSet, string tableName, ref SQLiteCommand sqlCommand) { int result = 0; Open(); using (SQLiteDataAdapter sqlAdapter = new SQLiteDataAdapter(sqlCommand)) { using (SQLiteCommandBuilder sqlCommandBuilder = new SQLiteCommandBuilder(sqlAdapter)) { if (string.Empty.Equals(tableName)) { result = sqlAdapter.Update(dataSet); } else { result = sqlAdapter.Update(dataSet, tableName); } } } Close(); return result; } /// <summary> /// 釋放該實例的托管資源。 /// </summary> public virtual void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// <summary> /// 釋放非托管資源。 /// </summary> /// <param name="disposing"></param> protected void Dispose(bool disposing) { if (!_disposed) { if (disposing) { // 定義釋放非托管資源 } _disposed = true; } } #endregion #region 屬性... /// <summary> /// 獲取數據庫連接字符串。 /// </summary> public string ConnectionString { get { return _connectionString; } } /// <summary> /// 設置是否自動提交事務。 /// </summary> public bool AutoCommit { get { return _autoCommit; } set { _autoCommit = value; } } #endregion #region 事件... /// <summary> /// 事務回滾事件。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Transaction_RollBack(object sender, EventArgs e) { _transacted = false; } /// <summary> /// 事務提交事件。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void Transaction_Commit(object sender, CommitEventArgs e) { _transacted = false; } #endregion } }