下面一段简单的代码中,我在conn.Open();时报出了一段句柄无效的异常
try
{
    OracleConnection conn = new OracleConnection(connStr);
    conn.Open();
    return conn;
}
catch(Exception ex)
{
    throw;
}ex信息:
System.Runtime.InteropServices.COMException
ex.Message——句柄无效。 (异常来自 HRESULT:0x80070006 (E_HANDLE))
ex.Source——mscorlib
ex.StackTrace——在 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)\r\n   在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)\r\n   在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)\r\n   在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)\r\n   在 System.Data.OracleClient.OracleConnection.Open()\r\n   在 CardServer.DataBase.DB.GetConnection() 位置 (此处为当前代码文件路径):行号 44"补充说明:连接字符串应该没问题"Data Source =orcl; User Id = ****; Password =****",在绝大部分时间都可以正常连接,但是隔1~2天或者不定期会报出来。数据库连接也没超过最大连接数,因为报错的时候我都看过数据库当前SESSSION数量。还有,如果把断点拉回去再执行一次(包括CONNECTION的实例化),还是会一直报这个错,但是我打开以下其他界面后返回来就没事了。大家都帮帮忙啊,发表一下意见,不管对不对都好,谢谢了~~~

解决方案 »

  1.   

    我的CONNECTION用完都关闭了的,而且我这里是实例化出来一个,并不是打开之前的。而且我查数据库的SESSION我的连接就只有1个
      

  2.   

    之前遇到过一个类似的问题。有个家伙知道我们客户的数据库密码,写了个循环往表里东西的。while (true)
    这种。弄的机子报这个类似的错误。
      

  3.   

    try
    {
      OracleConnection conn = new OracleConnection(connStr);
      conn.Open();
      return conn;
    }
    catch(Exception ex)
    {
      throw;
    }
    你只有打开数据库的代码,却没有执行命令啊 
    试试写句command 命令看看到底是哪里出错了?
      

  4.   

    测试 connStr 出错时的值?
      

  5.   

    回7楼:open时已经出错
    回8楼:connStr我没任何问题
      

  6.   

    connStr连接字符串出错,要么ODBC配置不对。
      

  7.   


    open时出错,那还是conn实例化时出的错。   把connStr贴出来
      

  8.   

    我用的是OracleClient,跟ODBC没关系吧connStr="Data Source =orcl; User Id = CardSys; Password =123456";我觉得连接字符串应该没问题吧,在绝大部分时间都是正常的