龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

使用设计模式构建通用数据库访问类(2)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
trans.Commit(); inTransaction=false; } public override void RollbackTrans() { trans.Rollback(); inTransaction=false; } public override void exeSql(string strSql,string[] strParams,object[] strValues)
  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;
public OleDBOperator(string strConnection)
{
 this.conn= new OleDbConnection(strConnection);
}
public override IDbConnection Connection
{
 get{return this.conn;}
}
public override void Open()
{
if(conn.State.ToString().ToUpper()!="OPEN")
this.conn.Open();
}
public override void Close()
{
  if (conn.State.ToString().ToUpper()=="OPEN")
this.conn.Close();
}
public override void BeginTrans()
{
  trans=conn.BeginTransaction() ;

精彩图集

赞助商链接