ADO.NET事务和SQL Server 2008事务

时间:2010-01-21 12:37:59

标签: sql transactions

如果我在ADO.NET中运行存储过程并启用了事务,并且SP在其中开始自己的事务(使用COMMIT TRANS)。 ADO.NET回滚事务会发生什么?来自SP的交易是否也会回滚? 在调用ADO.NET之前,DB是否处于状态?

谢谢。

1 个答案:

答案 0 :(得分: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