2012-04-11 29 views
2

这两个问题的答案非常接近回答我自己的问题,但它们并不完全适用。在可能未打开或关闭的SqlConnection上调用Close关闭

现在我知道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语句将明确地处理Open和Closed案例,如果/*??*/对于其他州是相同的,那将是我的默认情况。)

回答

2

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

+0

如果我的代码不在Dispose()中,这个答案会改变吗? – mafue 2012-04-11 18:19:02

+0

如果这段代码不在Dispose里面,那么......很难说;我想要回顾一下你使用这些组件的方式,因为如果没有更多关于你的需求的信息,我会怀疑你是在错误的轨道上执行。 – overslacked 2012-04-11 18:28:20

+1

够公平的。在这种情况下,我很满意Dispose。而且,由于'使用'调用无论如何都要处理,这必须是当人们以优选的方式打开SqlConnections时,SqlConnections如何关闭。 – mafue 2012-04-11 19:17:58