代码之家  ›  专栏  ›  技术社区  ›  Feryt

ADO.NET事务和SQL Server 2008事务

  •  1
  • Feryt  · 技术社区  · 16 年前

    如果我在ADO.NET中运行启用了事务的存储过程,并且sp在内部开始自己的事务(使用commit trans)。 当ADO.NET回滚事务时会发生什么?来自sp的事务是否也进行了回滚? 数据库的状态是否与调用ADO.NET之前一样?

    谢谢您。

    1 回复  |  直到 16 年前
        1
  •  5
  •   Adriaan Stander    16 年前

    我刚刚用 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