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