如果使用TransactionScope
,它應該做工精細,但範圍必須環繞連接(S):
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
,但請記住將事務(從連接)關聯到每個命令。
你如何在代碼中使用事務範圍(使用語句或try/catch)? – Goran 2009-12-01 12:26:00
是的Goran,我使用「using」語句,如: 使用(TransactionScope scope = new TransactionScope()) 封裝在try/catch塊中。 並且對SP的調用在此範圍內 – 2009-12-01 12:36:44
我不明白這是怎麼回事。如何在OnExit方法中添加回滾調用?這應確保在停止控制檯應用程序並且事務未完成時調用回滾。 – Goran 2009-12-01 12:46:11