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{ ////// SQLiteHelper /// 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 构造函数... ////// 使用默认的连接字符串初始化 public SQLiteHelper() : this(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString) { } ///类的新实例。 /// /// 初始化 SQLiteHelper /// /// 数据库连接字符串。 public SQLiteHelper(string connectionString) { _connectionString = connectionString; _connection = new SQLiteConnection(_connectionString); _connection.Commit += new SQLiteCommitHandler(Transaction_Commit); _connection.RollBack += new EventHandler(Transaction_RollBack); } ////// SQLiteHelper 析构函数 /// ~SQLiteHelper() { Dispose(false); } #endregion #region 方法... ////// 打开数据库连接。 /// private void Open() { if (_connection.State == ConnectionState.Closed) { _connection.Open(); } } ////// 关闭数据库连接。 /// private void Close() { if (_connection.State != ConnectionState.Closed) { if (_transacted && _autoCommit) { Commit(); } _connection.Close(); } } ////// 开始数据库事务。 /// public void BeginTransaction() { _connection.BeginTransaction(); _transacted = true; } ////// 开始数据库事务。 /// /// 事务锁级别。 public void BeginTransaction(IsolationLevel isolationLevel) { _connection.BeginTransaction(isolationLevel); _transacted = true; } ////// 提交当前挂起的事务。 /// public void Commit() { if (_transacted) { _transaction.Commit(); _transacted = false; } } ////// 回滚当前挂起的事务。 /// public void Rollback() { if (_transacted) { _transaction.Rollback(); _transacted = false; } } ////// 对连接执行 Transact-SQL 语句并返回受影响的行数。 /// /// SQL 语句 ///返回受影响的行数。 public int ExecuteNonQuery(string commandText) { int result = 0; Open(); using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText)) { result = sqliteCommand.ExecuteNonQuery(); } Close(); return result; } ////// 对连接执行 Transact-SQL 语句并返回受影响的行数。 /// /// SQL 语句 /// 要添加的值。 /// 返回受影响的行数。 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; } ////// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。 /// /// 用于查询的 Sql 语句。 ///结果集中第一行的第一列;如果结果集为空,则为空引用。返回的最大字符数为 2033 个字符。 public object ExecuteScalar(string commandText) { object result = null; Open(); using (SQLiteCommand sqliteCommand = new SQLiteCommand(commandText)) { result = sqliteCommand.ExecuteScalar(); } Close(); return result; } ////// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。 /// /// 用于查询的 Sql 语句。 /// 要添加的值。 /// 结果集中第一行的第一列;如果结果集为空,则为空引用。返回的最大字符数为 2033 个字符。 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; } ////// 查询数据并返回一个 /// 用于查询的 Sql 语句。 ///。 /// 返回一个 public DataSet GetDataSet(string commandText) { return GetDataSet(commandText, string.Empty); } ///对象。 /// 查询数据并返回一个 /// 用于查询的 Sql 语句。 /// 用于表映射的源表的名称。 ///。 /// 返回一个 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; } ///对象。 /// 查询数据并返回一个 /// 用于查询的 Sql 语句。 ///。 /// 对象。 /// 返回一个 public DataSet GetDataSet(string commandText, out SQLiteCommand sqlCommand) { return GetDataSet(commandText, string.Empty, out sqlCommand); } ///对象。 /// 查询数据并返回一个 /// 用于查询的 Sql 语句。 /// 用于表映射的源表的名称。 ///。 /// 对象。 /// 返回一个 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; } ///对象。 /// 为具有指定 /// 用于更新数据源的名称的 更新数据。 /// 。 /// 指定的一个 对象。 /// public int Update(DataSet dataSet, ref SQLiteCommand sqlCommand) { return Update(dataSet, string.Empty, ref sqlCommand); } /// 中成功更新的行数。 /// 为具有指定 /// 用于更新数据源的名称的 更新数据。 /// 。 /// 用于表映射的源表的名称。 /// 指定的一个 对象。 /// 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; } /// 中成功更新的行数。 /// 释放该实例的托管资源。 /// public virtual void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ////// 释放非托管资源。 /// /// protected void Dispose(bool disposing) { if (!_disposed) { if (disposing) { // 定义释放非托管资源 } _disposed = true; } } #endregion #region 属性... ////// 获取数据库连接字符串。 /// public string ConnectionString { get { return _connectionString; } } ////// 设置是否自动提交事务。 /// public bool AutoCommit { get { return _autoCommit; } set { _autoCommit = value; } } #endregion #region 事件... ////// 事务回滚事件。 /// /// /// void Transaction_RollBack(object sender, EventArgs e) { _transacted = false; } ////// 事务提交事件。 /// /// /// void Transaction_Commit(object sender, CommitEventArgs e) { _transacted = false; } #endregion }}