C# 如何知道事务范围是否成功
我需要知道我的事务范围是否成功。就好像记录是否能够保存在数据库中一样 注意:我在服务层中有这个作用域,我不希望包含Try-Catch块C# 如何知道事务范围是否成功,c#,C#,我需要知道我的事务范围是否成功。就好像记录是否能够保存在数据库中一样 注意:我在服务层中有这个作用域,我不希望包含Try-Catch块 bool txExecuted; using (var tx = new TransactionScope()) { //code // 1 SAVING RECORDS IN DB // 2 SAVING RECORDS IN DB tx.Complete(); txExecuted = true; } if (txExec
bool txExecuted;
using (var tx = new TransactionScope())
{
//code
// 1 SAVING RECORDS IN DB
// 2 SAVING RECORDS IN DB
tx.Complete();
txExecuted = true;
}
if (txExecuted ) {
// SAVED SUCCESSFULLY
} else {
// NOT SAVED. FAILED
}
注释后的代码将进行更新,可能会使用ExecuteOnQuery()实现-这将返回受影响行数的int。跟踪所有返回值以了解有多少行受到影响 整个事务在完成时要么成功,要么经历异常。如果未遇到异常,则表示事务成功。如果发生异常,则事务的某些部分失败;这一切都没有发生 通过考虑这两个事实(记录受影响计数、事务异常或否),您可以知道保存是否有效以及有多少行受到影响 我不太理解txecuted的用途——如果发生异常,将永远不会设置它,也永远不会考虑if。这样运行的唯一代码是if(true)中的内容。我不明白你怎么能决定不使用try/catch,而希望用一个系统做任何有用的事情,这个系统可以在出现问题时抛出异常;你说你不想捕获异常并不能阻止异常的发生,也不会影响程序的控制流。很明显,调用该方法只表示范围内的所有操作都已成功完成 但是,您还应该注意,调用此方法不会 保证事务的提交。这只是一种通知的方式 您的状态的事务管理器。调用此方法后,您可以 无法再通过当前属性访问环境事务, 尝试这样做会导致抛出异常 资源管理器之间提交的实际工作发生在 如果TransactionScope对象创建了 交易 由于您使用的是ADO.NET,因此将返回受影响的行数。您可以在使用块的提交和外部执行数据库查找 在我看来,不尝试是错误的。您希望捕获异常中的日志
try
{
using (var scope = new TransactionScope())
{
using (var conn = new SqlConnection("connection string"))
{
}
// The Complete method commits the transaction. If an exception has been thrown,
// Complete is not called and the transaction is rolled back.
scope.Complete();
}
}
catch (TransactionAbortedException ex)
{
// log
}
您是否使用标准ADO.NET和SQL server?dotnet core和SQL server