第一种写法:
string Sql = "select * from employee with(readpast)";
DataSet result=commonDB.ExecuteDataSet(CommandType.Text,Sql); 第二种写法:
string Sql = "select * from employee with(readpast)";
DbConnection conn = commonDB.CreateConnection();
conn.Open();
DbTransaction tran = conn.BeginTransaction(IsolationLevel.ReadCommitted);
DataSet result = commonDB.ExecuteDataSet(tran, CommandType.Text, Sql);
tran.Commit();
conn.Close();请问上面这两种写法等效吗? 谢谢.

解决方案 »

  1.   

    READPAST导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),
    而不是阻塞该事务,使其等待其它事务释放在这些行上的锁。
    READPAST 锁提示仅适用于运行在提交读隔离级别的事务,并且只在行级锁之后读取。
      

  2.   

    从MSDN上的解释来看,应该不一样。
      

  3.   

    等效第一种CLR自动创建了默认对象第二种BeginTransaction对仅作SELECT毫无意义
      

  4.   

    WITH READPAST
    必须在SELECT 中使用
      

  5.   

    问题是这样起的: 当我用第一种写法的时候, 有时候会出错, 错误的大概意思就是readpast 只在 READ COMMITTED 或 REPEATABLE READ 隔离级别上使用, 所以使用了第二种写法(提升事务的级别), 如果两个等效的话, 那这样就OK了.PS: 如果可以知道程序哪里降低了整个数据库的事务级别?
      

  6.   

    To: hangang7403 请看6楼的回复. 里面有说原因.
      

  7.   

    WITH READPAST的用法貌似大家没有弄明白,详情请大家参阅MSDN的说法。
    楼主的错误再次说明,WITH READPAST错误。
    同意楼上的“仅查询数据的话没必要做事务处理”说法,但请仔细看一下这仅仅只是一句简单查询吗?
    请再次看一下这句话:READPAST导致事务跳过由其它事务锁定的行
      

  8.   

    select   *   from   不要用*,直接使用字段!select没必要用事务!