督察,有测试此标准的方式,一拉:如果连接已经打开,可以调用OracleConnection.Open()吗?
if (! con.Open())
con.Open();
?
更新: 我想我没有提及这些是我使用的Oracle的ODP组件。 OracleConnection组件没有ConnectionState属性。
督察,有测试此标准的方式,一拉:如果连接已经打开,可以调用OracleConnection.Open()吗?
if (! con.Open())
con.Open();
?
更新: 我想我没有提及这些是我使用的Oracle的ODP组件。 OracleConnection组件没有ConnectionState属性。
你需要将你的代码分成不同的区别ct图层来避免这种情况。只应在主方法(在API中 - 不是主应用程序的方法)中打开连接 - 然后传递给协调(私有)方法,该方法只消耗连接而不管理连接(打开,关闭,事务操作等) )。这使您的代码保持清洁,并保证您的交易/连接安全。
使用Connection.State属性来检查连接是否已经打开
if(con.State == ConnectionState.Closed){
con.Open();
}
注意:如果连接丢失,这不起作用。例如,如果您在程序运行时终止该会话,con.State将仍然处于打开状态。我想知道是否有人用低开销的方式来判断会话的连接是否真正打开。例如:您可以使用数据库来检查会话是否打开,您可以用最低成本进行交互? – shindigo 2013-06-27 15:31:45
if(Con.State != ConnectionState.Open)
con.Open();
,如果你想只开放关闭的连接,你可以使用
if(Con.State == ConnectionState.Close)
con.Open();
ConnectionState:http://msdn.microsoft.com/en-us/library/system.data.connectionstate.aspx
不应该那第二个'if'是'=='而不是'!='? – cadrell0 2012-03-27 16:34:54
对,我做了复制和粘贴/ – 2012-03-27 16:37:21
我想我没有提及这些是我使用的Oracle的ODP组件。 OracleConnection组件没有ConnectionState属性。 – 2012-03-27 16:41:36
System.Data.OracleClient.dll或Oracle.DataAccess.dll? – cadrell0 2012-03-27 16:47:06