2010-01-21 85 views
1

如果我在ADO.NET中运行存储过程并启用事务并且SP在内部(使用COMMIT TRANS)开始自己的事务。 ADO.NET回滚事务时会发生什么?来自SP的事务也回滚了吗? 数据库处于调用ADO.NET之前的状态吗?ADO.NET事务和SQL Server 2008事务

谢谢。

回答

5

我刚才测试了使用这个代码使用C#2008,SQL Server 2005中下面和它确实回滚

SqlConnection con = new SqlConnection("server=svr;database=db;uid=user;pwd=pw;Connect Timeout=900"); 
SqlCommand cmd = con.CreateCommand(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandText = "MySp"; 
con.Open(); 
SqlTransaction trans = con.BeginTransaction(); 
cmd.Transaction = trans; 
cmd.ExecuteNonQuery(); 
trans.Rollback(); // or trans.Commit() 
con.Close(); 

数据库代码

CREATE TABLE [dbo].[TEST](
    [Val] [int] NULL 
) 

ALTER PROCEDURE MySp 
AS 
BEGIN 
    BEGIN TRANSACTION T1 
    INSERT INTO TEST SELECT 1 
    COMMIT TRANSACTION T1 
END 
+2

+1。必须如此,对。但实际上是+1! – 2010-01-21 13:03:06

+0

我想冒险猜测,然后想到拧它,让我们看看真正的X - )。 – 2010-01-21 13:11:23