我是否需要将数据库事务与c#TableAdapters一起使用?

我是否需要将数据库事务与c#TableAdapters一起使用?,c#,transactions,tableadapter,C#,Transactions,Tableadapter,我在使用表适配器的事务中发现了这一点。然而,本文并没有解释为什么需要甚至需要事务 为什么我试图在TabLeAdppter旁边实现事务? < P>假设当你在保存一个对数据库进行多个查询的东西时,会发生一些不好的事情。开始保存操作时,您希望对已保存的所有数据执行什么操作? 大多数开发人员希望使以前保存的数据无效。 好这就是事务的目的:在事务中封装所有的保存逻辑,这样如果在中间发生了不好的事情,则什么也不保存。 关于事务主题的更多信息:原因是将这些数据库操作作为更广泛事务单元的一部分来执行,这样您就可

我在使用表适配器的事务中发现了这一点。然而,本文并没有解释为什么需要甚至需要事务


为什么我试图在TabLeAdppter旁边实现事务?

< P>假设当你在保存一个对数据库进行多个查询的东西时,会发生一些不好的事情。开始保存操作时,您希望对已保存的所有数据执行什么操作? 大多数开发人员希望使以前保存的数据无效。 好这就是事务的目的:在事务中封装所有的保存逻辑,这样如果在中间发生了不好的事情,则什么也不保存。 关于事务主题的更多信息:

原因是将这些数据库操作作为更广泛事务单元的一部分来执行,这样您就可以以原子(全部或无)方式提交这些操作和其他操作,或者确保您的读写操作在同一事务中发生(以避免虚读/不可重复读)。事实上,我不是适配器模型的超级粉丝,但是

如何
TransactionScope
会更简单,因为ADO.NET连接应该自动登记:

using(var tran = new TransactionScope()) {
    // do work A
    // do work B
    // do work C
    tran.Complete();
}

任务完成…

事务允许您维护数据库中的数据一致性。通常最好在所有数据库更新/插入中引入事务。如果指定的存储过程因任何原因失败,则始终回滚

如果您曾经遇到过这样的情况,即您希望在原子调用中对多个表进行有保证的更新,那么事务使这成为可能。如果没有事务,您可以更新一个表,然后第二个表失败,剩下的是问题数据。
例如,您可能会遇到这样的情况:您只有一个屏幕,只需单击一个按钮就可以添加一个父记录和一组子记录。如果没有事务,父记录会成功保存,但其中一个子记录会爆炸。对于事务,您可以回滚整个过程,并要求用户解决数据问题。

你们在这里发布的每一条消息对我来说都不错,但我们不应该忘记,与解决方案相比,总是有优势和劣势 例如,在应用程序端管理事务(不管如何)将增加网络流量,因为.net必须将所有命令发送到SQL Server:

正在使用(var-tran=newTransactionScope()){

}

在这种情况下,它必须发送“开始事务”和“提交”


最糟糕的情况是,如果在“//do work b”之后连接被切断,会发生什么情况?。这意味着.Net既不能发送“回滚”也不能发送“提交”,因此我们将在SQL Server端打开一个可能导致死锁的事务。

您是否正在寻找有关事务用途的文档?目的和一般良好做法将非常有帮助。是的,在引入事务之后,您可以自己回答这个问题。不幸的是,由于数据库的配置,我不能使用TransactionScope,因为它们将多个事务操作提升为分布式操作。因此,对我来说,这似乎是一个漫长而痛苦的“分部类”方法!
// do work A 

// do work B 

// do work C 

tran.Complete();