我再数据访问层写了两个类
class x
{
    operatex(数据库的连接,操作,关闭)
}
class y
{
    operatey(数据库的连接,操作,关闭)
}
我怎么在页面层同时调用x.operatex()和y.operatey()
我想让他们两个都成功才成功,任何一个失败就算失败,即怎样用事务?
(不要给我说在页面层再次用到数据库连接,通过连接对象的事务来控制,这样岂不是连接次数太多了,另外我不想在页面层使用数据库连接)

解决方案 »

  1.   

    在你两个类的数据库连接是怎么取得的
    你可以在构造函数里面重载一个把conn传进来,只要是一个conn那么就一个封在一个事务操作里面..
      

  2.   

    http://blog.csdn.net/charles_y/archive/2005/12/13/550833.aspx
      

  3.   

    两个都是同样的从web.config里去连接字符串,新建connection,新建command
    请你说的详细一点
      

  4.   

    ilik(煊烨※涅磐)能否说的详细一点?
      

  5.   

    class y
    {
        operatey(数据库的连接,操作,关闭)
        y(){}
        y(x _x){}//重载构造函数,在这里的connection用x的connection对象。
    }
      

  6.   

    %Microsoft Visual Studio .NET 2003安装目录%\SDK\v1.1\Samples\Technologies\ComponentServices\transactions
      

  7.   

    charles_y你的回答我看了,但你可能不明白我的意思,就是说我不是不明白事务的调用,
    我是说在aspx里怎样调用事务,因为原则上aspx页面里不提倡将数据库连接写到这里的,
    没有数据库连接对象,你怎么操作事务?
      

  8.   

    hainang1234(鼠·神·泪) 的回答我定义的两个类是平级的,不想你中调用它,她中调用你
      

  9.   

    com+的事务操作能回滚数据库的操作吗?
      

  10.   

    里面不是讲了使用COM+事务吗?
      

  11.   

    这是一个事务边界的问题。比较麻烦,不过现在已经有解决方案了。没必要用Com+。
    你可以用Nhiberate或者http://www.cnblogs.com/luoqing这里面有个框架。里面的数据访问部分的事务处理非常的Exellence.
    比如:
    class x
    {
        operatex(数据库的连接,操作,关闭)
    }
    class y
    {
        operatey(数据库的连接,操作,关闭)
    }
    在同时调用operatex,operatey时,它会把事务串联起来。形成一个事务
      

  12.   

    就是两个类都继承一个积累..
    大概如下
    public abstract class BaseDAO 
    {
    public BaseDAO()
    {
    _conn = new SqlConnection(  AppConfig.DbConnectionString );
    _conn.Open();
    } public BaseDAO( BaseDAO db )
    {
    _conn = (SqlConnection)db.GetConnection();
    _trans = (SqlTransaction)db.GetTransaction();
    }
    protected IDbConnection GetConnection()
    {
    return _conn ;
    }
    public IDbTransaction GetTransaction()
    {
    return _trans ;
    }}
    //代码不是很完整,大概是这样的一个思路
      

  13.   

    还有我现在用的是微软的
    using Microsoft.Practices.EnterpriseLibrary.Configuration;
    using Microsoft.Practices.EnterpriseLibrary.Data;
    using Microsoft.Practices.EnterpriseLibrary.Common;
    使用这三个DLL,用不用每次数据库操作都关闭conncection
    如下面:
    public static DataTable Get(long _intSystemRoleID)
    {
             Database db=DatabaseFactory.CreateDatabase("DatabaseInstance0");
             string StrCmd="up_SystemRole";
    DBCommandWrapper cw=db.GetStoredProcCommandWrapper(StrCmd);
    cw.AddInParameter("@SystemRoleID",DbType.Int64,_intSystemRoleID);
    return (DataTable)(db.ExecuteDataSet(cw)).Tables[0];
    }
    还是这样调用:
    public static DataTable Get(long _intSystemRoleID)
    {
             Database db=DatabaseFactory.CreateDatabase("DatabaseInstance0");
             db.GetConnection().Open();
             string StrCmd="up_SystemRole";
    DBCommandWrapper cw=db.GetStoredProcCommandWrapper(StrCmd);
    cw.AddInParameter("@SystemRoleID",DbType.Int64,_intSystemRoleID);
    DataTable dt=(DataTable)(db.ExecuteDataSet(cw)).Tables[0];
             db.GetConnection().Close();
             return dt;
    }另外如果如果采用类的继承的方法,连接数据库的操作是会少写很多,但是关闭连接不好控制,具体怎么控制呢
      

  14.   

    SqlTransaction Trans = new SqlDB().getConnection().BeginTransaction();
            try
            {
                你的操作
                Trans.Commit();
            }
            catch
            {            
               Trans.Rollback();          
            }
      

  15.   

    Climb_Tree(爬树) 你的回答
    你能保证每次数据库操作都是采用同一个connection吗,
    因为你的你new操作了,不能保证同一个connection怎么能在一个事务里操作