打开SqlConnection之前处理不同的ConnectionStates

时间:2020-03-06 14:26:51  来源:igfitidea点击:

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

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

我在某处读到了ConnectionState.Broken,需要在重新打开连接之前将其关闭。有人对此有经验吗?谢谢-

解决方案

这不是直接回答问题,而是最佳实践是为每次访问数据库打开和关闭连接。 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

这样,我们无需在打开连接时检查连接状态。

http://msdn.microsoft.com/zh-CN/library/system.data.connectionstate.aspx

断开的连接状态确实需要关闭并重新打开,然后才能继续使用。

编辑:不幸的是,关闭一个关闭的连接也会使我们失望。在对未知连接进行操作之前,我们需要测试ConnectionState。简短的switch语句也许可以解决问题。