gpt4 book ai didi

c# - .net 中的交易

转载 作者:IT王子 更新时间:2023-10-29 03:32:28 25 4
gpt4 key购买 nike

在 C# .Net 2.0 中执行事务的最佳做法是什么。应该使用哪些类?需要注意的陷阱是什么等等。所有这些提交和回滚的东西。我刚刚开始一个项目,我可能需要在将数据插入数据库时​​进行一些交易。欢迎任何有关交易的基本内容的回复或链接。

最佳答案

有两种主要的交易;连接事务和环境事务。连接事务(例如 SqlTransaction)直接绑定(bind)到数据库连接(例如 SqlConnection),这意味着您必须不断传递连接 - 在某些情况下可以,但不允许“创建/使用/释放”用法,并且不允许跨数据库工作。示例(针对空格格式化):

using (IDbTransaction tran = conn.BeginTransaction()) {
try {
// your code
tran.Commit();
} catch {
tran.Rollback();
throw;
}
}

不是太乱,但仅限于我们的连接“conn”。如果我们想调用不同的方法,我们现在需要传递“conn”。

替代方案是环境事务; .NET 2.0 中的新功能,TransactionScope对象 (System.Transactions.dll) 允许在一系列操作中使用(合适的提供者将自动加入环境事务)。这使得改造现有(非事务性)代码以及与多个提供商对话变得容易(尽管如果您与多个提供商对话,DTC 将参与其中)。

例如:

using(TransactionScope tran = new TransactionScope()) {
CallAMethodThatDoesSomeWork();
CallAMethodThatDoesSomeMoreWork();
tran.Complete();
}

请注意,这两种方法可以处理它们自己的连接(打开/使用/关闭/处置),但它们将默默地成为环境事务的一部分,而无需我们传递任何内容。

如果您的代码出错,Dispose() 将在没有 Complete() 的情况下被调用,因此它会被回滚。支持预期的嵌套等,尽管您不能回滚内部事务但仍完成外部事务:如果有人不满意,事务将中止。

TransactionScope 的另一个优点是它不仅仅与数据库相关;任何交易感知提供者都可以使用它。以 WCF 为例。或者甚至有一些与 TransactionScope 兼容的对象模型(即具有回滚功能的 .NET 类 - 也许比纪念品更容易,尽管我自己从未使用过这种方法)。

总而言之,一个非常非常有用的对象。

一些注意事项:

  • 在 SQL Server 2000 上,TransactionScope 将立即转到 DTC;这在 SQL Server 2005 及更高版本中已修复,它可以使用 LTM(开销少得多)直到您与 2 个源等对话,当它被提升为 DTC 时。
  • 有一个glitch这意味着您可能需要调整连接字符串

关于c# - .net 中的交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com