C# 正在打开已关闭的SqlConnection

C# 正在打开已关闭的SqlConnection,c#,ado.net,sqlconnection.close,C#,Ado.net,Sqlconnection.close,关闭和打开同一个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()

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

这样做没有问题。您可以随意打开和关闭连接。但是,我想知道为什么您希望打开和关闭同一个,而不是为每个呼叫创建一个新的。是不是因为你连续打了很多电话?如果是这样,您可以考虑使用单个<代码> SqLink连接< /C> >并且在开始时打开它一次并在结束时关闭它一次。

在关闭它之后,您可以重新打开连接(虽然不能重新打开已设置的连接)。p> 至于Dave Zych的问题-我们的一些客户在其数据库上拥有每连接许可证,关闭连接允许其他应用程序使用它


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

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

原因:ADO.NET使用一种称为连接池的技术。当您使用连接字符串打开连接时,ADO.NET将查看池,并查看池中是否已存在此连接以及该连接字符串,如果答案为“是”,则它将获取此连接并为您打开该连接。否则,ADO.NET将向池中添加带有该连接字符串的连接并打开该连接。 这就是为什么第一次访问数据库总是比其他人慢的原因


此处的详细信息:

我认为这很好-但请记住在不再使用时调用
Dispose()
。我认为这回避了一个问题。。。为什么首先要关闭它?只需使用
使用(SqlConnection conn=newsqlconnection(ConnectionString)){//your code}
-这将为您处理并关闭它。答案是“否”,只要是活动对象,打开/关闭连接就没有问题。问题是为什么?实际上我有一个类,它充当一些旧VB库的代理。这些VB模块需要启动和提交事务的方法,所以在我的类的实例中应该有连接对象。由于类的生命周期实际上很长,所以我不能永远保持连接打开——所以我感兴趣的是,我是否可以简单地在关闭/打开周期中保持每个实例一个连接对象,而不是每次都重新创建它。