本章介绍框架中封装的数据库操作的一些功能,在实现的过程中费了不少心思,针对不同数据库的操作(SQLServer、Oracle、DB2)这方面还是比较简单的,用工厂模式就能很好解决,反而是在多数据库同时操作方面走了不少弯路;现在从以下几个方面进行说明:
本文要点:
1.不同数据库操作
2.多数据库同时操作
3.数据库事务处理
4.数据分页处理
5.关于oleDb对象创建与销毁的生命周期
此处用到了工厂模式来实现不同数据库操作,看下图
AbstractDatabase是一个抽象类,定义了所有对数据库的操作抽象方法,包括执行一个SQL语句、执行存储过程、事务操作等
[Serializable] public abstract class AbstractDatabase { #region 属性 /// <summary> /// 数据库事务 /// </summary> protected DbTransaction transaction = null; //数据库事务 protected string _connString; /// <summary> /// 返回数据库连接字符串 /// </summary> public string ConnectionString { get { return _connString; } } protected bool isInTransaction = false; //是否在事务中 /// <summary> /// 返回是否处于事务中 /// </summary> protected bool IsInTransaction { get { return this.isInTransaction; } } public int WorkId { get; set; } public string DbKey { get; set; } public DatabaseType DbType { get; set; } public AbstractDatabase newOleDb(string dbkey) { return this; } public AbstractDatabase defaultOleDb() { return this; } public abstract void TestDbConnection(); #endregion /// <summary> /// 启动一个事务 /// </summary> public abstract void BeginTransaction(); /// <summary> /// 提交一个事务 /// </summary> public abstract void CommitTransaction(); /// <summary> /// 回滚一个事务 /// </summary> public abstract void RollbackTransaction(); public abstract DbCommand GetDbCommand(); #region 执行插入一条记录 适用于有 自动生成标识的列 public abstract int InsertRecord(IDbCommand cmd); public abstract int InsertRecord(string commandtext); #endregion #region 返回一个DataTable public abstract DataTable GetDataTable(IDbCommand cmd); public abstract DataTable GetDataTable(string commandtext); public abstract DataTable GetDataTable(string storeProcedureName, params object[] parameters); #endregion #region 返回一个DataReader public abstract IDataReader GetDataReader(IDbCommand cmd); public abstract IDataReader GetDataReader(string commandtext); #endregion #region 执行一个语句,返回执行情况 public abstract int DoCommand(IDbCommand cmd); public abstract int DoCommand(string commandtext); public abstract int DoCommand(string storeProcedureName, params object[] parameters); #endregion #region 执行一个命令返回一个数据结果 public abstract object GetDataResult(IDbCommand cmd); public abstract object GetDataResult(string commandtext); public abstract object GetDataResult(string storeProcedureName, params object[] parameters); #endregion public abstract DataSet GetDataSet(string storeProcedureName, params object[] parameters); }