当我们为C#中的每个语句打开关闭连接时,如何在单个事务中处理连接?
该方案具有相同的连接字符串,并且该连接被打开和关闭为多种类型,每个语句一次。
考虑以下示例
void updateSomething() {
using (SqlConnection connection = new SqlConnection(
"Integrated Security=SSPI;Initial Catalog=Northwind"))
{
connection.Open();
// Execute the statements
connection.Close();
}
}
当我执行以下代码时:
void SomeMethod()
{
using(TransactionScope scope = new TransactionScope())
{
for(int i=0; i < 10; i++)
{
this.updateSomething();
}
scope.Complete();
}
}
建议对每个语句使用连接“打开/关闭”。那是因为我们实际上不是在创建连接,而只是在池中使用一个。
为什么会这样?我得到的是,我们将连接保持了尽可能短的时间,但问题是,在大多数事务中,我们将在下一条语句的下一个时刻获取它。
是否仅是为了避免在语句之间存在高要求的代码计算时间(如果存在的话)(这不应该,因为它将数据库锁定在事务状态的时间更长)。
在交易过程中保持一个连接打开是否有意义?
答案 0 :(得分:1)
建议对每个语句使用连接“打开/关闭”。
我没有在上下文中看到该评论,而是因为您所说的:创建和销毁SqlConnection
对象并不意味着您正在创建和销毁网络连接。
我认为“为每个语句使用一个”的动机是,不必担心创建SqlConnection
对象时会变得高效。不要以全力以赴地保持生命,并在整个代码中传递它,以免避免断开网络连接。毫无意义。
在您的示例中,它并没有真正的改变。只要您要按顺序而不是并行进行查询,就可以对每个查询使用相同的SqlConnection
对象。由于您节省了创建SqlConnection
对象的计算时间,因此效率甚至可能更高。但是节省的时间甚至可能不会引起注意。