C# TransactionScope未捕获异常
我已经查看了几个线程,似乎没有任何线程起到帮助作用,因此这是我的TransActionScope代码C# TransactionScope未捕获异常,c#,C#,我已经查看了几个线程,似乎没有任何线程起到帮助作用,因此这是我的TransActionScope代码 public void InsertFormData() { try { using (TransactionScope ts = new TransactionScope()) { using (SqlConnection cnn = new SqlConnection
public void InsertFormData()
{
try
{
using (TransactionScope ts = new TransactionScope())
{
using (SqlConnection cnn = new SqlConnection(strConnectionString))
{
cnn.Open();
InsertData(cnn);
InsertMoreInfo(cnn);
//etc...
ts.Complete();
}
}
}
catch (Exception ex)
{
LogException(ex);
}
下面是我在那里调用的一个方法的示例:
public void InsertData(cnn)
{
SqlCommand cmd = null;
SqlTransaction trans = null;
try
{
cmd = new SqlCommand("StoredProcedure", cnn, trans);
trans = cnn.BeginTransaction();
cmd.Parameters.Add("@PARAM1", SqlDbType.Int);
cmd.Parameters["@PARAM1"].Direction = ParameterDirection.Output;
cmd.Parameters.Add("@PARAM2", SqlDbType.VarChar).Value = RepID;
cmd.Parameters.Add("@PARAM3", SqlDbType.VarChar).Value = ViolatorID;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Transaction = trans;
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
LogException(ex)
}
}
我用两种不同的方法重做了这个方法,结果基本相同。我尝试过从方法中删除Try/catch,以查看这是否会触发错误,但它只是在Global.ascx中触发了我的应用程序_错误。基本上,我只想让它运行这些方法,如果一个方法没有正确完成,它会将其回滚。当您以当前的方式处理异常时,执行流允许运行您的
ts.complete()
调用。要么:
- 移除
中的InsertData
catch
- 记录后再次抛出
中的InsertData
,或catch
- 使
返回一个布尔值以指示成功或失败,并使调用方法仅在成功时调用InsertData
ts.Complete()
using
语句结束时,如果尚未调用.Complete()
,事务将自动回滚。