我想知道在它内部只有SELECT命令的情况下,使用ROLLBACK或COMMIT结束事务是否有所不同。 有这样的伪代码:
using (var tr = new TransactionScope())
{
if (!GetData(condition).Any()) // SELECT command behind
{
InsertData(); // INSERT command
tr.Commit();
return true;
}
tr.Commit(); // Or rollback?
return false;
}
在任何一种情况下是否都有性能处罚或无关紧要?
答案 0 :(得分:0)
假设您的InsertData基于okut插入了GetData的输出:
一般清理
using (var tr = new TransactionScope())
{
if (!GetData(condition).Any()) // SELECT command behind
{
InsertData(); // INSERT command
tr.Complete()
return true;
}
return false;
// rollback will be automatic if complete isn't called
}
更高效:
if (!GetData(condition).Any()) // SELECT command behind
{
// implied transaction within the InsertData method.
InsertData(); // INSERT command
return true;
}
return false;
答案 1 :(得分:0)
提交说“对我在此事务范围内所做的任何数据修改都是持久的”。 Rollback说“撤消我在此交易范围内所做的任何数据修改”。在select的情况下,没有进行任何数据修改,因此提交和回滚都做同样的事情(即释放选择完成后保存的任何锁)。