在可能未打开或未关闭的 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 语句将显式处理打开和关闭的情况,如果其他状态/*??*/
相同,那将是我的默认情况。
由于你在Dispose()中实现了它,我想我会简单地调用_transactionConnection.Dispose();
,让SqlConnection类做任何它认为合适的事情。我会避免在这里调用Close()
,因为虽然目前SqlConnection.Dispose基本上只是关闭它,但将来可能会改变。