我有一个小问题。请指导我。 我在C#编码(控制台应用程序)。我在我的代码中调用了两个不同的存储过程。基本上这两个存储过程都访问同一个表。 第一个SP具有选择查询和更新查询。 第二个SP有一个更新查询。
现在我想在事务模式下调用这些SP(要么全部成功,要么是第二个SP无法回滚第一个SP)。我在我的C#代码中使用了“TransactionScope”,但似乎没有工作正常。即当我停止控制台应用程序时,有时我会看到第一个SP被执行而第二个SP失败。
有人可以就此提出建议。
的问候,
贾斯汀塞缪尔。
答案 0 :(得分:4)
如果您使用的是TransactionScope
,则应正常工作,但范围必须包围连接:
using(TransactionScope tran = new TransactionScope()) {
using(SqlConnection conn = new SqlConnection(cs)) {
// either multiple commands on one connection
using(SqlCommand cmd = conn.CreateCommand()) {
// etc
}
using(SqlCommand cmd = conn.CreateCommand()) {
// etc
}
}
using(SqlConnection conn = new SqlConnection(cs)) {
// or a separate connection
using(SqlCommand cmd = conn.CreateCommand()) {
// etc
}
}
tran.Complete();
}
是 an edge case where a TransactionScope
can fail导致后来的命令在没有事务的情况下运行。
或者,对于单个连接使用SqlTransaction
,但请记住将事务(来自连接)与每个命令相关联。