在页面上执行查询操作时出现如下错误提示: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;
}
}谢谢
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;
}
}谢谢
MyConnection_Oracle.Dispose();
Oracel它大于最大的进processes时,就会自己断开,
所以你最好不要有Refresh时都联上数据库
能否写一个类,这样好些,我以前也是这样了,也是一个类搞定
Oracle.Dispose();
MyConnection_Oracle.Close();
MyConnection_Oracle = null;
MyConnection_Oracle.Dispose();
了,可还是不行啊
但是报的错的确是因为开了过多的数据库连接造成的
你有没有试过把oracle的缓存区开大点?
oracle8.1.7以前的版本都有点毛病,特别试一些缓存中的碎片不回收,你试着将数据库升到8.1.7看看
还有ASP.NET也有不回收资源的毛病。
还有你可以用oracle里的DBA工具看看会话中有多少你的连接你跟踪程序,当你执行完CLOSE以后,在DBA的会话中刷新一下,看看你的先前的连接会话是否已经被清除
select sid from v$session where osuser='ASPNET';
通过这个可以看出现在数据库中有多少个连接会话 你看看是否你连接一次 就多个SID 然后再试试我上面说的方法 进行测试
我确实是把连接数据库的过程写成一个类,反复调用的。也都是及时关闭的。为什么还是会出现这样的问题呢。
还有就是我的ORACLE服务器每次重启后都不会自动启动ORACLE服务,需要用internal用户去手动启动,这又是什么原因呢
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;
}
}
{不要 判断 直接断开
连接在执行完后不一定是OPEN,可能是SLEEP,
改成
if(MyConnection_Oracle!=null||MyConnection_Oracle.State != ConnectionState.Close)
试试