[已解决问题] 谁看看这段代码有问题没?
提问时间: 2008-01-23 17:55
悬赏分:10 浏览:344 次

无意间在google codesearch  上看到这样一段代码:
其中有个ExecuteReader方法,如下:
public DbDataReader ExecuteReader(string query,CommandType commandtype, ConnectionState connectionstate)
        {
            objSelectOrQueryCommand.CommandText = query;
            objSelectOrQueryCommand.CommandType = commandtype;
            DbDataReader reader=null;
            try
            {
                if (objConnection.State == System.Data.ConnectionState.Closed)
                {
                    objConnection.Open();
                }
                if (connectionstate == ConnectionState.CloseOnExit)
                {
                    reader = objSelectOrQueryCommand.ExecuteReader(CommandBehavior.CloseConnection);
                }
                else
        &nb

提问者:钱掌柜 - 初学一级

问题补充: {
reader = objSelectOrQueryCommand.ExecuteReader();
}

}
catch (Exception ex)
{
HandleExceptions(ex);
}
finally
{
objSelectOrQueryCommand.Parameters.Clear();
}

return reader;
}
HandleExceptions方法如下:(此异常处理中,如果LogErrors,HandleErrors为true的话,DataReader的连接不是就没有机会关闭了吗?会不会造成链接泄漏??)

private void HandleExceptions(Exception ex)
{
string exMsg = ex.Message + Environment.NewLine + ex.StackTrace;
if (LogErrors)
{
WriteToLog(exMsg);
}
if (HandleErrors)
{
strLastError = exMsg;
}
else
{
throw ex;
}
}


所有回答(2)
这个时间应该是打开链接失败的情况吧?何来泄漏之说
5个月前   回答者:沙加 - 老鸟四级
这里还没有到处理DataReader开关的时候,应该不会存在泄漏的问题。
reader = objSelectOrQueryCommand.ExecuteReader(CommandBehavior.CloseConnection);
reader释放 就会自动关闭Connection!

根据这段代码 他维护的Connection对象应该一直是一个objConnection,也就是说command对象objSelectOrQueryCommand使用的connection一直是objConnection,每次都是判断这个对象,应该不会产生新的Connection的,也就不会产生泄漏:)。

5个月前   回答者:.Live - 菜鸟二级
评论
5个月前   钱掌柜 :
怎么提问被截断了??
5个月前   钱掌柜 :
晕啊,这个提问怎么不能修改啊。
5个月前   钱掌柜 :
沙加同学,就是在打开链接失败的时候,在异常处理中,连接可能没有机会被关闭啊。
.Live ,我的意思是在异常的情况下,连接会泄漏。
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除