悬赏分: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;
}
}
|
这个时间应该是打开链接失败的情况吧?何来泄漏之说 这里还没有到处理DataReader开关的时候,应该不会存在泄漏的问题。 reader = objSelectOrQueryCommand.ExecuteReader(CommandBehavior.CloseConnection); reader释放 就会自动关闭Connection! 根据这段代码 他维护的Connection对象应该一直是一个objConnection,也就是说command对象objSelectOrQueryCommand使用的connection一直是objConnection,每次都是判断这个对象,应该不会产生新的Connection的,也就不会产生泄漏:)。 |
|
5个月前 钱掌柜 : 怎么提问被截断了?? |
|
5个月前 钱掌柜 : 晕啊,这个提问怎么不能修改啊。 |
|
5个月前 钱掌柜 : 沙加同学,就是在打开链接失败的时候,在异常处理中,连接可能没有机会被关闭啊。 .Live ,我的意思是在异常的情况下,连接会泄漏。 |