#region DBOperator
/// <summary>
/// 访问接口
/// </summary>
public abstract class DBOperator
{
public abstract IDbConnection Connection { get;} //得到数据库连接
public abstract void Open(); //打开数据库连接
public abstract void Close(); //关闭数据库连接
public abstract void BeginTrans(); //开始一个事务
public abstract void CommitTrans(); //提交一个事务
public abstract void RollbackTrans(); //回滚一个事务
public abstract string strSql(string strSql);//执行Sql语句,没有返回值
public abstract string strOleDbTran(ArrayList Array);
public abstract DataSet GetDataSet(string QueryString);//执行Sql,返回DataSet
}
#endregion
#region OleDB
/// <summary>
///
/// </summary>
internal class OleDB : DBOperator
{
//数据库连接
private OleDbConnection conn;
//事务处理类
private OleDbTransaction trans;
//指示当前是否正处于事务中
private bool inTransaction = false;
//SQL数据库的连接方法
public OleDB(string strConnection)
{
this.conn = new OleDbConnection(strConnection);
}
//SQL数据库的连接方法
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();
inTransaction = true;
}
//提交事务处理机制
public override void CommitTrans()
{
trans.Commit();
inTransaction = false;
}
//回滚事务处理机制
public override void RollbackTrans()
{
trans.Rollback();
inTransaction = false;
}
//执行SQL 语句
public override string strSql(string strSql)
{
try
{
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = this.conn;
cmd.CommandText = strSql;
if (conn.State.ToString().ToUpper() != "OPEN")
this.conn.Open();
cmd.ExecuteNonQuery();
if (conn.State.ToString().ToUpper() == "OPEN")
this.conn.Close();
return "Yes";
}
catch(Exception e)
{
return e.Message;
}
}
//提交事物
public override string strOleDbTran(ArrayList Array)
{
try
{
if (conn.State.ToString().ToUpper() != "OPEN")
this.conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = this.conn;
trans = this.conn.BeginTransaction();
cmd.Transaction = trans;
foreach (string s in Array)
{
cmd.CommandText = s;
cmd.ExecuteNonQuery();
}
trans.Commit();
if (conn.State.ToString().ToUpper() == "OPEN")
this.conn.Close();
return "Yes";
}
catch (Exception e)
{
try
{
trans.Rollback();
}
catch(Exception ex)
{
/*
if (trans.Connection != null)
{
return "";
}
*/
return "回滚失败:" + ex.Message;
}
finally
{
this.conn.Close();
}
return e.Message;
}
}
//读取数据集
public override DataSet GetDataSet(string strSql)
{
if (conn.State.ToString().ToUpper() != "OPEN")
this.conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = this.conn;
if (inTransaction)
cmd.Transaction = trans;
DataSet ds = new DataSet();
OleDbDataAdapter ad = new OleDbDataAdapter();
cmd.CommandText = strSql;
ad.SelectCommand = cmd;
ad.Fill(ds);
if (conn.State.ToString().ToUpper() == "OPEN")
this.conn.Close();
return ds;
}
}
#endregion
#region DB
/// <summary>
///
/// </summary>
public class DB
{
private static string strConnection=ConfigurationSettings.AppSettings["connstr"];
public static DBOperator GetDB()
{
return new OleDB(strConnection);
/*
if (strConnection.IndexOf("provider=") < 0) //SqlServer
{
return new OleDB(strConnection);
return new SqlDB(strConnection);
}
else //other database
{
return new OleDB(strConnection);
}
*/
}
}
#endregion