using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
{
//...
//
}问题:
TransactionScope 事务是否支持OleDbConnection?

解决方案 »

  1.   

    以前看到过一个例子,支持了SqlConnection。按理也应该支持OleDbConnection。
    另外,只操作数据库,而程序里没有需要事务的话,conn.BeginTransaction()可以直接用,如果要回滚DataSet一类的数据的集里的内容的话,就要用到TransactionScope 
      

  2.   

    这是我使用TransactionScope 事务处理时的报错:
    (数据库用的是Access)“Microsoft.Jet.OLEDB.4.0”提供程序不支持 ITransactionLocal 接口。本地事务不可用于当前提供程序
      

  3.   

    刚才查了一下,发现TransactionScope使用的话,都是SqlConnection的例子,而据说不支持access。
    access的话,就用下面这几组内容了。
    OleDbConnection conn = new OleDbConnection(connectstring);
            OleDbTransaction trans = conn.BeginTransaction();
            trans.Commit();
            trans.Rollback();
            trans.Dispose();
    谢谢楼主。。学习了。
      

  4.   

    嗯,我也是在OleDb上使用的OleDbTransaction,倒也是没有试过TransactionScope。
      

  5.   

    没有试过在Access下面的使用,Oracle等都可以
      

  6.   

    问题在于,在事务处理块内,要动态生成多个连接的,类似:
    //事务开始OleDbConnection conn = new OleDbConnection(connectstring); 
    OleDbCommmand...
    conn.CLose();OleDbConnection conn = new OleDbConnection(connectstring); 
    OleDbCommmand...
    conn.CLose();OleDbConnection conn = new OleDbConnection(connectstring); 
    OleDbCommmand...
    conn.CLose();//事务结束
      

  7.   

    晕。你那个肯定有问题
    同一个函数里,多次命名conn。。
    像这种到处都要使用Connection 的情况,可以把它写成全局的,或是属性。
    另外,如果是不同的connectstring,你可以把它分成三个函数,在每个函数内部执行事务,也不一定要整体执行事务的。
      

  8.   

    另外,把BeginTransaction();Commit();Rollback(); Dispose();都做成独立函数的形式,管理起来也是很方便的 OleDbConnection conn = new OleDbConnection(connectstring);
    try
    {BeginTrans();
    OleDbCommmand...
    Commit();
    }
    catch
    {
    Rollback();
    }
    finally
    {
     Dispose();
    }
    conn.CLose(); 这样的话,你就可以将它做到数据访问层里,抽出来单独放了。
      

  9.   

    没有用过TransactionScope。 
      

  10.   

    可以试哈 COM+的嵌套事务