在数据库中直接执行事务和利用SqlTransaction中执行事务有什么区别???string sqlStr = "下面的那个事务";
begin transaction
declare @error int 
set @error=0
update bank set currentMoney=currentMoney-1000 where customerName='张三'
set @error=@error+@@error
update bank set currentMoney=currentMoney+1000 where customerName='李四'
set @error=@error+@@error
if(@error<>0)
begin 
print'交易失败,回滚事务'
rollback transaction
end
else
begin 
print'交易成功,永久保存'
commit transaction
end
直接执行上面那个事务(SQL语句的事务)和下面C#中利用SqlTransaction执行的事务不是一样的么??
private static void ExecuteSqlTransaction(string connectionString)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();        SqlCommand command = connection.CreateCommand();
        SqlTransaction transaction;        // Start a local transaction.
        transaction = connection.BeginTransaction("SampleTransaction");        // Must assign both transaction object and connection
        // to Command object for a pending local 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();            // Attempt to commit the transaction.
            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);            // Attempt to roll back the transaction.
            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);
            }
        }
    }
}

解决方案 »

  1.   

    还有上面的SqlCommand command = connection.CreateCommand();是什么意图呢???为什么不用SqlCommand command = new SqlCommand();呢????
      

  2.   

    一样的 SqlTransaction有回滚功能 更方便傻瓜些 
      

  3.   

    一样的,都是事务回滚功能。只不过一个是在T-SQl 一个是C#
      

  4.   


    这两个我认为有区别,conneciton 存在时sqlcommand 才存在, 反之不存在时sqlcommand 也不存在 报异常
      

  5.   

    一个需要客户端打开msdtc相关的服务,一个不需要。尽量还是使用sql存储过程事务吧,这样客户端不需要配置了
      

  6.   

    SqlCommand command = new SqlCommand()与SqlCommand command = conn.CreateCommand()差不多都是用于创建一个Sql命令对象!事务嘛!其实就是保证数据库操作要么执行成功要么执行不成功!就回滚到先前的状态