using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace DataAccess
{
/// <summary>
/// 数据库管理类
/// </summary>
public class DbManager:IDisposable
{
#region 私有属性
private SqlConnection _CurrentConnection = null ; // 当前数据库连接对象
private SqlTransaction _CurrentTransaction = null; // 当前事务处理对象
private int intTranLayer = 0 ; // 事务嵌套处理的层数
private string _ConnectionStr = string.Empty ; // 数据库连接字符串
#endregion
#region 公共属性
/// <summary>
/// 当前数据库连接对象
/// </summary>
public SqlConnection CurrentConnection
{
get
{
if(_CurrentConnection==null)
{
_CurrentConnection = new SqlConnection(_ConnectionStr);
}
if(_CurrentConnection.State == ConnectionState.Closed)
{
_CurrentConnection.Open();
}
return _CurrentConnection;
}
}
/// <summary>
/// 当前事务处理对象
/// </summary>
public SqlTransaction CurrentTransaction
{
get
{
return _CurrentTransaction;
}
}
/// <summary>
/// 开始事务处理
/// </summary>
public void BeginTransaction()
{
if(_CurrentTransaction == null)
{
_CurrentTransaction = CurrentConnection.BeginTransaction() ;
}
intTranLayer++ ;
}
/// <summary>
/// 提交事务
/// </summary>
public void Commit()
{
// 有嵌套事务,此处不提交事务
if(intTranLayer > 1)
{
intTranLayer-- ;
}
if(_CurrentTransaction != null && intTranLayer == 1)
{
_CurrentTransaction.Commit() ;
_CurrentTransaction = null ;
intTranLayer = 0 ;
}
}
/// <summary>
/// 回滚事务
/// </summary>
public void Rollback()
{
if(_CurrentTransaction!=null)
{
intTranLayer = 0 ;
_CurrentTransaction.Rollback() ;
_CurrentTransaction = null ;
}
}
#endregion
#region 私有方法
public DbManager()
{
if(_CurrentConnection == null)
{
_ConnectionStr = Common.Config.ConnectionString ;
_CurrentConnection = new SqlConnection(_ConnectionStr) ;
}
}
#endregion
#region 保护方法
/// <summary>
/// 释放数据库连接
/// </summary>
public void Dispose()
{
if(_CurrentConnection.State==ConnectionState.Open)
{
_CurrentConnection.Close();
}
this._CurrentConnection.Dispose();
GC.SuppressFinalize(this);
}
protected void Finalize()
{
Dispose();
}
#endregion
}
}