gpt4 book ai didi

c# - 管理 SQL 连接和事务的正确/理想方式 - C#

转载 作者:太空狗 更新时间:2023-10-30 00:53:23 27 4
gpt4 key购买 nike

我有一个 C# 应用程序,它跨多个函数和类进行许多 SQL 调用。数据库是SQL Server 2008 R2。目前,每个类或函数在需要向数据库读取/写入数据时都会打开自己的 SQL 连接:

using (SqlConnection connection = new SqlConnection(connectionString))

这是处理连接管理的正确方法吗?此外,我刚刚开始添加交易,所以如果我没记错的话,交易应该在同一个连接上完成。这是一些代码的示例:

try
{
Class1 class1 = new Class1();
class1.data = "somedata";
class1.save(); // new sql connnection

Class2 class2 = new Class2();
class2.data = GetSomeData(); // new sql connection
class2.save(); // new sql connection
}

catch (Exception e)
{
}

我查看了 TransactionScope 和 SqlTransaction,但不确定我当前的连接结构是否适合此实现。任何指导将不胜感激。

最佳答案

为每个操作“打开”一个新连接并不像人们想象的那样占用大量资源。

原因是当今所有 ADO.NET 提供程序都在内部使用连接池。这意味着每次您 .Close() 一个连接时,它实际上只是返回到池中。

当您开始在一个事务中涉及多个连接时,性能就会受到影响,因为这意味着事务被提升为分布式事务。也就是说,第三方交易管理器参与并控制交易。

所以答案是,只要您的实体没有依赖关系,就没有理由从事务开始或停止使用多个连接。

什么时候需要交易?

但是,如果实体 A 依赖于实体 B,则您必须使用事务。

依赖关系也可以由业务规则指定。让我们举个例子。

您有一笔银行转帐,其中应从账户 A 中提取资金并存入账户 B。如果没有交易,资金可能会从账户 A 中提取但不会存入 B(由于错误)。

关于c# - 管理 SQL 连接和事务的正确/理想方式 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16650457/

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