在可能未打开或未关闭的 SqlConnection 上调用关闭

本文关键字:调用 SqlConnection | 更新日期: 2023-09-27 18:30:50

这两个

问题的答案非常接近于回答我自己的问题,但它们并没有完全到达那里。

  • "打开"和"已关闭"是否仅与连接状态枚举相关的值?
  • 在打开 SqlConnection 之前处理不同的连接状态

现在我知道SqlConnection的状态不仅仅是打开和关闭,我想知道在关闭不在 using 语句中的连接时是否需要这样做:

switch (_transactionConnection.State)
{
    case ConnectionState.Broken: /*??*/ ; break;
    case ConnectionState.Closed: ; break;
    case ConnectionState.Connecting: /*??*/ ; break;
    case ConnectionState.Executing: /*??*/ ; break;
    case ConnectionState.Fetching: /*??*/ ; break;
    default: _transactionConnection.Close(); break;                         
}

SqlConnection _transactionConnection不在 using 语句中,因为我需要从此类外部启动、提交和回滚事务。此类实现IDisposable,switch 语句位于Dispose(bool disposing)

MSDN表示,打开和关闭以外的状态适用于该产品的未来版本,但@Charlie表示反射器显示其他状态正在使用中。

谁能告诉我什么应该取代/*??*/?(我希望我的最终 switch 语句将显式处理打开和关闭的情况,如果其他状态/*??*/相同,那将是我的默认情况。

在可能未打开或未关闭的 SqlConnection 上调用关闭

由于你在Dispose()中实现了它,我想我会简单地调用_transactionConnection.Dispose();,让SqlConnection类做任何它认为合适的事情。我会避免在这里调用Close(),因为虽然目前SqlConnection.Dispose基本上只是关闭它,但将来可能会改变。