2

这两个问题的答案与我自己的答案非常接近,但还没有完全达到。

既然我知道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 说除了 open 和 closed 之外的状态是用于产品的未来版本,但 @Charlie 说反射器显示其他状态正在使用中。

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

4

1 回答 1

2

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

于 2012-04-11T17:48:51.837 回答