最近在一个项目中需要用到sqllite数据库,因此根据项目需要收集了sqllite的数据库访问类的资料,然后根据实际需求进行了改装,并
成功的运用到了项目中,现在项目也成功上线,特将此代码分享给大家:
/// <summary>
/// 数据库操作抽象
/// </summary>
public interface IDataAccess
{
/// <summary>
/// 打开
/// </summary>
void Open();
/// <summary>
/// 关闭
/// </summary>
void Close();
/// <summary>
/// 执行 增 删 改 查
/// </summary>
/// <param name="sql">Sql语句</param>
/// <param name="queryParameter">参数</param>
int ExecuteNonQuery(string sql, QueryParameter[] queryParameter);
/// <summary>
/// 查询某一个值
/// </summary>
/// <param name="sql">Sql语句</param>
/// <param name="parameters">参数</param>
/// <returns>Object</returns>
object GetScalar(string sql, QueryParameter[] parameters);
/// <summary>
/// 查询多条条数据
/// </summary>
/// <param name="sql">Sql语句</param>
/// <param name="parameters">参数</param>
/// <returns>DataTable</returns>
DataTable GetTable(string sql, QueryParameter[] parameters);
/// <summary>
/// 查询多条值
/// </summary>
/// <param name="sql">Sql语句</param>
/// <param name="parameters">参数</param>
/// <returns>DataReader</returns>
IDataReader GetReader(string sql, QueryParameter[] parameters);
/// <summary>
/// 开始事务
/// </summary>
void BeginTran();
/// <summary>
/// 提交事务
/// </summary>
void CommitTran();
/// <summary>
/// 回滚事务
/// </summary>
void RollBackTran();
}
public class SqlLiteDalHelper : IDataAccess
{
private readonly SQLiteConnection _connection;
private SQLiteTransaction _tran;
public SqlLiteDalHelper(string constr)
{
_connection = new SQLiteConnection(constr);
}
public void Open()
{
if (this._connection == null || this._connection.State == ConnectionState.Closed)
{
try
{
_connection.Open();
}
catch (ArgumentException)
{
throw;
}
}
}
public void Close()
{
if (this._connection != null || _tran != null)
{
_connection.Close();
}
}
public int ExecuteNonQuery(string sql, QueryParameter[] queryParameter)
{
SQLiteCommand cmd = new SQLiteCommand();
PrepareCommond(cmd, CommandType.Text, queryParameter, sql);
Open();
int i = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
Close();
return i;
}
public object GetScalar(string sql, QueryParameter[] parameters)
{
SQLiteCommand cmd = new SQLiteCommand();
PrepareCommond(cmd, CommandType.Text, parameters, sql);
Open();
object obj = cmd.ExecuteScalar();
cmd.Parameters.Clear();
Close();
return obj;
}
public System.Data.DataTable GetTable(string sql, QueryParameter[] parameters)
{
DataTable dt = new DataTable();
SQLiteCommand cmd = new SQLiteCommand();
PrepareCommond(cmd, CommandType.Text, parameters, sql);
Open();
SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd);
sda.Fill(dt);
cmd.Parameters.Clear();
Close();
return dt;
}
public System.Data.IDataReader GetReader(string sql, QueryParameter[] parameters)
{
SQLiteCommand cmd = new SQLiteCommand();
PrepareCommond(cmd, CommandType.Text, parameters, sql);
Open();
SQLiteDataReader dr = cmd.ExecuteReader();
cmd.Parameters.Clear();
Close();
return dr;
}
public void BeginTran()
{
this._tran = this._connection.BeginTransaction();
}
public void CommitTran()
{
this._tran.Commit();
}
public void RollBackTran()
{
this._tran.Rollback();
}
private void PrepareCommond(SQLiteCommand cmd, CommandType commandType, QueryParameter[] parameters, string commandtext)
{
cmd.CommandType = commandType;
cmd.CommandText = commandtext;
cmd.Connection = _connection;
cmd.Transaction = this._tran;
if (parameters != null && parameters.Length > 0)
{
for (int i = 0; i < parameters.Length; i++)
{
cmd.Parameters.AddWithValue(parameters[i].Name, parameters[i].Value);
}
}
}
}