在页面上执行查询操作时出现如下错误提示:ORA-00020:maximum number of processes(50) exceeded部分数据库操作语句如下:OracleConnection MyConnection_Oracle = new OracleConnection(连接字符串);
OracleDataAdapter comOra=null;
bool Bol_Return;
string Str_Sql = "要执行的SQL语句";

try
{
MyConnection_Oracle.Open(); comOra=new OracleDataAdapter(Str_Sql,MyConnection_Oracle); comOra.Fill(Dts_Result,Str_TableName);
Bol_Return = true;
}
catch(Exception ex)
{
Dtb_Wrong = User_Sys_ErrorInfo.GetError(ex.ToString(),"2");
Bol_Return = false;
}
finally
{
if(comOra!=null )
{
comOra.Dispose();
comOra = null;
} if(MyConnection_Oracle!=null||MyConnection_Oracle.State == ConnectionState.Open)
{
MyConnection_Oracle.Close();
MyConnection_Oracle = null;
}
}谢谢

解决方案 »

  1.   

    程序应该没问题。是不是Oracle的问题?
      

  2.   

    如果你使用OracleDataAdapter操作数据库,连接不需要你显示的打开和关闭
      

  3.   

    MyConnection_Oracle.Close();
    MyConnection_Oracle.Dispose();
      

  4.   

    我是使用微软提供的ORACLE客户端控件的
      

  5.   

    可能是你每Refresh时都联上数据库,
    Oracel它大于最大的进processes时,就会自己断开,
    所以你最好不要有Refresh时都联上数据库
    能否写一个类,这样好些,我以前也是这样了,也是一个类搞定
      

  6.   

    你是否连接太频繁或少Oracle.Close();
    Oracle.Dispose();
      

  7.   

    我现在已经是
    MyConnection_Oracle.Close();
    MyConnection_Oracle = null;
    MyConnection_Oracle.Dispose();
    了,可还是不行啊
      

  8.   

    程序逻辑上看上去没什么问题
    但是报的错的确是因为开了过多的数据库连接造成的
    你有没有试过把oracle的缓存区开大点?
    oracle8.1.7以前的版本都有点毛病,特别试一些缓存中的碎片不回收,你试着将数据库升到8.1.7看看
    还有ASP.NET也有不回收资源的毛病。
      

  9.   


    还有你可以用oracle里的DBA工具看看会话中有多少你的连接你跟踪程序,当你执行完CLOSE以后,在DBA的会话中刷新一下,看看你的先前的连接会话是否已经被清除
      

  10.   

    我以前也遇到过这个问题 是ORACLE中的你的INACTIVE连接进程太多造成的 在DBA的会话中你可以看到有很多INACTIVE会话存在 解决的方法可以定义一个连接类 然后每个连接的地方都调用这个类中的连接数据库的函数  用完后立即断开 这样可以保证从登陆到关闭 一个客户端只有一个会话存在 
    select sid from v$session where osuser='ASPNET';
    通过这个可以看出现在数据库中有多少个连接会话 你看看是否你连接一次 就多个SID 然后再试试我上面说的方法 进行测试
      

  11.   

    确实里面有很多个连接。每次连接他这里都没有断开。
    我确实是把连接数据库的过程写成一个类,反复调用的。也都是及时关闭的。为什么还是会出现这样的问题呢。
    还有就是我的ORACLE服务器每次重启后都不会自动启动ORACLE服务,需要用internal用户去手动启动,这又是什么原因呢
      

  12.   

    是的,这个会不会跟我们在调试.net程序有关?我们是三个人在开发,都是连的这个数据库
      

  13.   

    我那个类是做成DLL了,每台机器上都考了一个,然后他们各自调用这个DLL的
      

  14.   

    你的关闭也是封装在DLL里的?我只是公用一个数据库连接 数据库断开我没有写在类里
      

  15.   

    是的,我全部是写在一起的。如下:
    try
    {
    MyConnection_Oracle.Open(); comOra=new OracleDataAdapter(Str_Sql,MyConnection_Oracle);

    if(Dts_Result.Tables[Str_TableName]!=null)
    {
    Dts_Result.Tables.Remove(Str_TableName);
    } comOra.Fill(Dts_Result,Str_TableName);
    Bol_Return = true;
    }
    catch(Exception ex)
    {
    Dtb_Wrong = User_Sys_ErrorInfo.GetError(ex.ToString(),"2");
    Bol_Return = false;
    }
    finally
    {
    if(comOra!=null )
    {
    comOra.Dispose();
    comOra = null;
    } if(MyConnection_Oracle!=null||MyConnection_Oracle.State == ConnectionState.Open)
    {
    MyConnection_Oracle.Dispose();
    MyConnection_Oracle.Close();
    MyConnection_Oracle = null;
    }
    }
      

  16.   

    错误提示说连接数超出了最大连接数50个!你可能是没有及时关闭每个连接吧!或者你去oracle 里设置一下最大数
      

  17.   

    if(MyConnection_Oracle!=null||MyConnection_Oracle.State == ConnectionState.Open)
    {不要 判断 直接断开
      

  18.   

    召唤  china2001ok(黑饿黑)
      

  19.   

    有错当然断不了  它根本就没有执行完  你的CONNECT执行到一般 只打开 还没执行到关 那个连接就一直都在 好象可以通过把服务器上的 ASP。NET运行进程KILL掉 或者在ORACLE服务器端断开
      

  20.   

    怎么才能在ORACLE服务器端自动断开啊
      

  21.   

    if(MyConnection_Oracle!=null||MyConnection_Oracle.State == ConnectionState.Open)这句错了.
    连接在执行完后不一定是OPEN,可能是SLEEP,
    改成
    if(MyConnection_Oracle!=null||MyConnection_Oracle.State != ConnectionState.Close)
    试试
      

  22.   

    CLIENT 以DBA身份访问数据库 可以看到会话 断开ASPNET。NET的连接