刚买了个万网的主机, 传好程序发现事务(TransactionScope)不能执行, 他那边技术说是虚拟主机的安全设置不允许IIS调用DTC服务没办法, 我的程序经常需要同时执行2-3条数据(一般一个insert 或 delete, 要同时执行一个update) , 这样的情况下有其它办法保证数据不出错么?

解决方案 »

  1.   

    可以用sqltransaction来处理using (SqlConnection conn = new SqlConnection(connectionString))
    {
    conn.Open();
    SqlTransaction transaction = conn.BeginTransaction(); try
    {
    SqlCommand cmd = new SqlCommand(sql, conn, transaction); cmd.Execute ...;
    ... transaction.Commit();
    }
    catch (Exception)
    {
    try { transaction.Rollback(); }
    catch { }
    throw;
    }
    }
      

  2.   

    ado.net开发就使用它本身的 DbTransaction 就可以。在你使用TransactionScope的地方,修改为传入 DbTransaction,而单个“数据处理”方法的内部应该使用作为参数传入的DbTransaction来获取它的DbConnection并用它创建DbCommand。在这个过程中,跟什么SQL Server、Oracle、Access并没有关系。ado.net对上述这些机制的都做了抽象,因此你切换其它的数据库应该不需要修改一行代码。