我有一个嵌套的事务,在异常数据最终存在于数据库之后,外部事务没有提交它。
有三个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