C#中的事务,首先用一个数据库连接对象处理一个操作,然后还有别的数据库操作 ,我又从新new了一个数据库连接对象进行操作,是不是这样子就不行阿.?我用三层做,数据库连接对象都封装在一个类里了,每次增删改操作都是从新得到连接对象,..

解决方案 »

  1.   

    你使用了TransactionScope的话,即使你的sql访问代码里没有明确使用事务就是SqlTransaction对象,它也会启动事务,你的每一个数据处理都会有事务。
      

  2.   

    搂主需要单独把Begin事务,和Commit事务,以及Rollback事务三个操作,也做成一个可调用的接口
      

  3.   

    再扩展一点建议,呵呵如果搂主在封装数据库访问操作的类里面使用了DataReader并且输出的话,还需要把CloseConnection也给做成一个可调用的接口,因为读取DataReader内容的时候,连接必须是打开的
    读完了才能关闭。
      

  4.   

    如果是多连接的话,就用分布式事务,
    using(System.Transaction.TrasactionScrop ts=new System.Transaction.TrasactionScrop())
    {
    //第一个类去增加到表A//第二个类增加数据到表C//第三个去干别的去ts.Complete();};
      

  5.   

    应用程序通过在 SqlConnection 对象上调用 BeginTransaction 来创建 SqlTransaction 对象。对 SqlTransaction 对象执行与该事务关联的所有后续操作(例如提交或中止该事务)。注意 
    在提交或回滚 SqlTransaction 时,应始终使用 Try/Catch 进行异常处理。如果连接终止或事务已在服务器上回滚,则 Commit 和 Rollback 都会生成 InvalidOperationException。
      

  6.   

    下面的示例创建一个 SqlConnection 和一个 SqlTransaction。此示例还演示如何使用 BeginTransaction、Commit 和 Rollback 等方法。出现任何错误时事务都会回滚。Try/Catch 错误处理用于处理尝试提交或回滚事务时的所有错误。
    private static void ExecuteSqlTransaction(string connectionString)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();        SqlCommand command = connection.CreateCommand();
            SqlTransaction transaction;        //开始事务.
            transaction = connection.BeginTransaction("SampleTransaction");        //设置command对象的Transaction属性来使用事务
            command.Connection = connection;
            command.Transaction = transaction;        try
            {
                command.CommandText =
                    "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
                command.ExecuteNonQuery();
                command.CommandText =
                    "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
                command.ExecuteNonQuery();            //提交事务            transaction.Commit();
                Console.WriteLine("Both records are written to database.");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
                Console.WriteLine("  Message: {0}", ex.Message);            //发生异常就回滚事务.
                try
                {
                    transaction.Rollback();
                }
                catch (Exception ex2)
                {
                    // This catch block will handle any errors that may have occurred
                    // on the server that would cause the rollback to fail, such as
                    // a closed connection.
                    Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                    Console.WriteLine("  Message: {0}", ex2.Message);
                }
            }
        }
    }