嵌套事务不回滚

时间:2018-02-12 07:25:18

标签: c# sql-server transactions

我有一个嵌套的事务,在异常数据最终存在于数据库之后,外部事务没有提交它。

有三个insert语句,每次后跟一个select语句。第二个select语句抛出异常。由于某种原因,我目前无法解释第三个语句最终在数据库中。 但是,如果没有发生异常(通过删除select语句或删除输入数组中的0),则在数据库中没有提交任何预期行为。

首先是小工作示例:

using (var transactionScope = new TransactionScope())
{
    var input = new[] {1, 0, 2 };

    foreach (var i in input)
    {
        using (SqlConnection cnn = new SqlConnection(connetionString))
        {
            cnn.Open();
            using (var tran = cnn.BeginTransaction())
            {
                var sql = "INSERT INTO [Test].[dbo].[Test] ([Timestamp] ,[Message]) VALUES ('" + DateTime.Now + "', 1 / " + i + ");";
                using (SqlCommand cmd = new SqlCommand(sql, cnn, tran))
                {
                    try
                    {
                        cmd.ExecuteNonQuery();
                        tran.Commit();
                    }
                    catch (Exception e)
                    {
                        tran.Rollback();
                    }
                }
            }
        }
    }
}

我错过了什么?

我正在使用SQL Server 2016& C#7

0 个答案:

没有答案