我们用asp.net+oracle开发项目,代码里,打开数据库之后,已经立即关闭了.但是oracle中的session还是存在.查询V$seesion表,那些进程都是inactive状态.不知道是代码问题,还是oracle的问题?那位仁兄遇到过?请帮忙!!!!!急!我跟踪了一段代码,这段代码明明打开连接之后关闭连接了.但是数据库还是有这个进程,这段代码有错误吗?
public static System.Data.DataTable Execute(string szSql)
{
string szCnn = "..";
System.Data.OracleClient.OracleConnection objCn = new System.Data.OracleClient.OracleConnection(szCnn);
objCn.Open();
System.Data.OracleClient.OracleDataAdapter objAdp = new System.Data.OracleClient.OracleDataAdapter(szSql, objCn);
System.Data.DataTable dtRs = new System.Data.DataTable(); try
{
objAdp.Fill(dtRs);
return dtRs;
}
catch
{
objCn.Close();
return null;
}
finally
{
objAdp.Dispose();
objCn.Close();
objAdp =null;
objCn = null;
}
}

解决方案 »

  1.   

    objCn.Dispose();
    加上上面的试试
      

  2.   

    意见一:你使用数据适配器OracleDataAdapter的时候不用自己去打开连接
    也就是不用objCn.Open()吧.....其二,你可以使用using(objCn = new OracleConnection()){}
      

  3.   


    --------------------------------------------------------------
    您好,我们是“2006中国首届杰出数据库工程师评选”活动组委会。
    您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
    http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
    一方面,他们会为您的问题提供满意的答案,
    另一方面,也邀请您为他们投上宝贵的选票。2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
    中抽取3名幸运者,赠送由IBM提供的精美礼品一份!此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
    http://www.bestdba.cn/match_discussion3.aspx?pointid=97&pointid2=1&pointid3=5非常感谢您对本次活动的支持!
    --------------------------------------------------------------
      

  4.   

    --------------------------------------------------------------
    您好,我们是“2006中国首届杰出数据库工程师评选”活动组委会。
    您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
    http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
    一方面,他们会为您的问题提供满意的答案,
    另一方面,也邀请您为他们投上宝贵的选票。2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
    中抽取3名幸运者,赠送由IBM提供的精美礼品一份!此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
    http://www.bestdba.cn/match_discussion3.aspx?pointid=97&pointid2=1&agains=1&pointid3=5非常感谢您对本次活动的支持!
    --------------------------------------------------------------
      

  5.   

    应该这是连接池技术的缘故:
    就是说你connection.Close()后, ADO.NET并没有释放掉connection, 它会保留一段时间,以拱新的connection创建时,就可以省去一大笔new的开销..另外ADO.NET连接池参数, 都可以在MSDN里查到, (好象是查 connect string 就行吧)
      

  6.   

    ASP.NET 中的 .NET Data Provider for Oracle 连接漏洞详见http://support.microsoft.com/?scid=kb;zh-cn;330126&spid=548&sid=global好像还没发布补丁.