传递SqlConnection

时间:2010-05-20 20:48:39

标签: .net transactions transactionscope sqlconnection

我创建了一个TransactionScope,在范围内,在数据库中创建和更新了各种项目。在此过程中,我对数据库进行了大量调用。最初我在TransactionScope的开头打开了一个SqlConnection,并将它传递给任何进行DB调用的函数,然后在所有调用完成之后和事务提交之前关闭了连接。这样做或打开和关闭每个呼叫的连接(使用相同的连接字符串)更好吗?

4 个答案:

答案 0 :(得分:4)

如果你要连续拨打很多电话,并且很容易传入开放连接,那么是的,重复使用开放连接。

但这并不是非常重要。没有以前那么多。 ADO.NET很好地为您管理这个。见Connection Pooling。如果你的代码变得复杂和奇怪,以促进一个单一的,打开的连接对象,那就不值得了。

(现在,确保您的连接对象(无论是否重复使用)处理当然非常重要,因为我打赌您已经知道了。)

答案 1 :(得分:4)

我倾向于避免不惜一切代价绕过连接。我刚刚看到有太多错误蔓延到系统中,例如,当其他人在一系列操作过程中关闭连接时,因为他们不知道其他人会使用相同的连接。

由于ADO.NET的连接池机制,创建SQLConnection 几乎是免费的,所以不要以为通过创建并传递它来节省任何空间/时间。

如果在您的情况下,您确实需要在事务范围内执行大量数据库操作,那么请适当地管理您的范围,但在您需要时创建,使用和处理您的连接 - 它'将帮助您保持代码更清洁,更安全。

答案 2 :(得分:2)

总的来说,我同意其他人所说的话。但请注意,一旦在单个TransactionScope实例中使用多个连接,它将提升您的(本地)事务to a distributed one,从而产生一些可能的重大开销。

来自同一个池的多个连接,因此使用相同的数据库,在这个意义上也算作多个连接。

如果这对您来说是一个问题,而不是代码结构或“清洁度”,典型的SQL语句执行时间等,您需要做出决定。

答案 3 :(得分:0)

无论如何,如果想要与数据库建立多个连接,请使用connection pool