有多个数据操作,而且是循环的,怎么用事务来做回滚呢
SqlConnection Connection = new SqlConnection(Exam.Global.m_strSqlString);
Connection.Open();
SqlTransaction Tran = Connection.BeginTransaction();
try
{
for (; i < studentId.Length; i++)
{
sDB.YunSqlExecuteNonQuery( "CreatePaper ", parameters, Tran);
UpdateSubjectDegree(subjectIds, Tran);
}
i = 0;
for (; i < studentId.Length; i++)
{
sDB.YunSqlExecuteNonQuery( "update_applyExam2 ", parameters, Tran);
}
sDB.ExcuteSqlCommand(sql, Tran);
BackupPolicy(policy_id, ex_auditing_id, Tran);
Tran.Commit();
Response.Redirect( "Exams.aspx?kind= " + kind);
}
catch (Exception exp)
{
Tran.Rollback();
Response.Write(exp.Message);
}
finally
{
Connection.Close();
}
为简单起见,代码有省略。这段代码执行后,发生了错误:超时时间已到。在操作完成之前超时时间已过或服务器未响应。
如果不加事务就正常执行,我这里因为要用到事务,所以只用了一个SqlConnection对象,到底应该怎么做呢?请高手赐教。
[解决办法]
你的逻辑大体上没有任何错误的。错误的是你的习惯。
我大致有个设计规则:事务不应该长于3秒钟,如果长于3秒钟,那么应该从业务逻辑上去考虑改变存储结构。