每次打开和关闭一个SqlConnection对象与创建新对象相比,有什么问题吗? 例如:
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();
//Some work here
conn.Close()
//Some work here... conn stays in scope
conn.Open()
第二次打开连接会导致非法状态异常吗?
每次打开和关闭一个SqlConnection对象与创建新对象相比,有什么问题吗? 例如:
SqlConnection conn = new SqlConnection(ConnectionString);
conn.Open();
//Some work here
conn.Close()
//Some work here... conn stays in scope
conn.Open()
第二次打开连接会导致非法状态异常吗?
关闭连接后,您可以重新打开它(但是您不能重新打开已释放的连接)。
至于Dave Zych的问题-我们的一些客户在其数据库上拥有每个连接的许可证,关闭连接允许其他应用程序使用它。
通常情况下,您会启用连接池,这样数据库的实际连接不会立即被关闭,而是可以被应用程序内的其他相同的连接对象使用。
这个没有问题。您可以随意打开和关闭连接。但是,我想知道为什么您要打开和关闭同一个连接,而不是为每个调用创建一个新的连接。这是因为您正在快速连续地进行多次调用吗?如果是这样,您可以考虑使用单个SqlConnection
,在开始时打开它并在结束时关闭它。
原因: ADO.NET使用称为连接池的技术。当您使用连接字符串打开连接时,ADO.NET将查看池并查看该连接字符串是否已存在于池中,如果答案是是,则它将获取此连接并为您打开该连接。否则,ADO.NET将添加一个具有该连接字符串的连接到池中并打开该连接。 这就是为什么第一次访问数据库总是比其他时间慢的原因。
详情请参见:https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-connection-pooling
Dispose()
。 - Bridgeusing (SqlConnection conn = new SqlConnection(ConnectionString)) { //your code }
- 这将为您进行处理和关闭。答案是“否”,长时间打开/关闭连接并没有问题,只要它是活动对象。问题是为什么? - T.S.