在数据库中直接执行事务和利用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);
}
}
}
}
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);
}
}
}
}
这两个我认为有区别,conneciton 存在时sqlcommand 才存在, 反之不存在时sqlcommand 也不存在 报异常