打开已经关闭的SqlConnection

本文关键字:SqlConnection | 更新日期: 2023-09-27 17:49:24

每次关闭和打开相同的SqlConnection对象而不是创建新对象是否有任何问题?例如:

SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();
//Some work here
conn.Close()
//Some work here... conn stays in scope
conn.Open()

是否有机会获得非法状态异常打开连接第二次?

打开已经关闭的SqlConnection

可以在关闭连接后重新打开该连接(但是不能重新打开已处理的连接)。

至于Dave Zych的问题——我们的一些客户在他们的数据库上有每个连接的许可证,关闭一个连接允许其他应用程序使用它。

通常您将启用连接池,在这种情况下,到数据库的实际连接不会(总是)关闭(立即),但可以由应用程序中其他相等的连接对象使用。

这样做没有问题。您可以随心所欲地打开和关闭连接。然而,我想知道为什么您想要打开和关闭相同的一个,而不是为每个呼叫创建一个新的。这是因为你连续打了很多电话吗?如果是这样,您可以考虑使用单个SqlConnection,并在开始时打开一次,在结束时关闭一次。

打开和关闭相同的连接做完全相同的事情创建新的连接,然后打开和关闭它,只要连接字符串不改变。

原因: ADO。NET使用一种叫做连接池的技术。当您使用连接字符串打开连接时,ADO。NET会查看池,看看这个连接和那个连接字符串是否已经存在于池中,如果答案是肯定的,那么它会得到这个并为你打开那个连接。否则,ADO。NET将使用该连接字符串向池中添加一个连接并打开该连接。这就是为什么第一次访问数据库总是比其他时候慢。

详情在此:https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling