使用设计模式构建通用数据库访问类(2) this.conn.Open(); } public override void Close() { if (conn.State.ToString().ToUpper()=="OPEN") this.conn.Close(); } public override void BeginTrans() { trans=conn.BeginTransaction() ; inTransaction=true; } public override void CommitTrans() { trans.Commit(); inTransaction=false; } public override void RollbackTrans() { trans.Rollback(); inTransaction=false; } public override void exeSql(string strSql,string[] strParams,object[] strValues) { SqlCommand cmd=new SqlCommand(); cmd.Connection=this.conn ; if(inTransaction) cmd.Transaction=trans; if((strParams!=null)&&(strParams.Length!=strValues.Length) ) throw new ParamValueNotMatchException("查询参数和值不对应!"); cmd.CommandText=strSql; if(strParams!=null) { for(int i=0;i cmd.Parameters.Add(strParams[i],strValues[i]); } cmd.ExecuteNonQuery(); } public override DataSet exeSqlForDataSet(string QueryString) { SqlCommand cmd=new SqlCommand(); cmd.Connection=this.conn ; if(inTransaction) cmd.Transaction=trans; DataSet ds = new DataSet(); SqlDataAdapter ad = new SqlDataAdapter(); cmd.CommandText=QueryString; ad.SelectCommand =cmd; ad.Fill(ds); return ds; } } OleDb数据库操作的类同Sql Server数据库操作的类非常相似,只是把相应的Sql类替换成OleDb类。需要注意的是,因为OleDb和Sql Server的参数传递方式不一致,所以,这里需要做一点小小的转换,将"@参数名"类型的参数转换成"?",这个细节希望读者能够注意到。代码如下: internal class OleDBOperator : DBOperator { private OleDbConnection conn; private OleDbTransaction trans; private bool inTransaction=false;