在打开SqlConnection之前处理不同的ConnectionStates

如果您需要在发出查询之前打开SqlConnection,您是否可以以相同的方式处理所有非Open ConnectionStates? 例如:

if (connection.State != ConnectionState.Open) { connection.Open(); } 

我读到了某个地方,对于ConnectionState.Broken,连接需要在重新打开之前关闭。 有任何人对此有经验吗? 谢谢-

http://msdn.microsoft.com/en-us/library/system.data.connectionstate.aspx

在符合继续使用条件之前,需要关闭并重新打开断开的连接状态。

编辑:不幸的是,关闭一个已关闭的连接也会有误。 在对未知连接进行操作之前,您需要测试ConnectionState。 也许一个简短的转换声明可以解决问题。

这不是直接回答您的问题,但最佳做法是为每次访问数据库打开和关闭连接。 ADO.NET连接池确保了这一点。 在服务器应用程序(例如ASP.NET)中执行此操作尤其重要,但我甚至会在直接访问数据库的WinForms应用程序中执行此操作。

例:

 using(SqlConnection connection = new SqlConnection(...)) { connection.Open(); // ... do your stuff here } // Connection is disposed and closed here, even if an exception is thrown 

通过这种方式,您无需在打开连接时检查连接状态。

你可以用同样的方式处理它。 我在使用IE9时遇到了无数连接状态==坏了。 IE9在这方面存在根本性的错误,因为在数据库表的5或6次更新之后没有其他浏览器出现过这种连接状态断开的问题。 所以我使用对象上下文。 所以基本上只需关闭它并重新打开它。

在我在businss逻辑层中的所有读取和更新之前,我有这个代码:

 if (context.Connection.State == System.Data.ConnectionState.Broken) { context.Connection.Close(); context.Connection.Open(); }