可以
  
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html

解决方案 »

  1.   

    我是用EnterpriseLibrary1.0的,试了会报超时。
      

  2.   

    我想应该是要加保存点的吧,不然rollback就不正确了。
      

  3.   

    是的。
    public static Database GetDBInstance()
    {
    if (dbInstance != null)
    {
    return dbInstance;
    }
    String instance = System.Configuration.ConfigurationSettings.AppSettings["DBInstance"];
    return DatabaseFactory.CreateDatabase(instance); }怎么说呢?
      

  4.   

    我是说GetMax()和UpdateNum必须要用同一个connection
      

  5.   

    是啊,就是在同一个cn的,我把cn.close()放在finally{}中。目前是,重复读取没问题,但加了UpdateNum()后就报超时,请帮忙
      

  6.   

    我把原来UpdateNum()中的db.ExecuteNonQuery(transaction, CommandType.Text, sql).ToString();
    改为
    db.ExecuteNonQuery(CommandType.Text, sql).ToString();
    可以实现了重复读写了,多谢
      

  7.   

    我犯了个错误,用db.ExecuteNonQuery(CommandType.Text, sql).ToString()方法就无法rollback了
      

  8.   

    feiyun0112你好,我想请教一下,在同一个事务中是否可以实现对同一张表Table的同一个字段a进行重复GetMax()和UpdateNum()。
    IDbConnection connection = null;
    IDbTransaction transaction = null;
    try
    {
    Database db = DBAccess.GetDBInstance();
    connection = db.GetConnection();
    connection.Open();
    transaction = connection.BeginTransaction();//取最大值
    int GetMax()://更新最大值
    int num = GetMax();
    UpdateNum(num);.
    .
    .//取最大值
    int GetMax()://更新最大值
    int num = GetMax();
    UpdateNum(num);transaction.Commit();
    cn.close();
    }
     
    int GetMax()
    {
    select Max(a)+ 1 from Table ;
    return db.ExecuteScalar(CommandType.Text, sql);
    }int UpdateNum(num)
    {
    update Table set a = num ;
    return db.ExecuteNonQuery(transaction, CommandType.Text, sql).ToString();
    }我试了多次,都是报连接超时。请赐教我觉得在同一个事务里是不可对同一个表的同一个数据块进行重复读、写、读、写,我查了资料事务的isolationlevel好像主要是针对多事务并发处理,但我的程序是在同一个事务中的。
    而我现在默认的isolationlevel = readcommitted,我也试过isolationlevel = readuncommitted,但结果还是超时。迷茫中