下面的代码可以连接Oracle 9g, 但是Oracel8g连接不上,
请大家帮忙分析下原因,谢谢"Provider=OraOLEDB.Oracle.1;
User ID=call;Password=call;
Data Source='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
(HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SID=orcl)))'"

解决方案 »

  1.   

    开发环境使用VC++6.0,连接数据库使用OLE DB方式;
      

  2.   

    如何查询Oracle驱动版本?
    Provider=OraOLEDB.Oracle.1
      

  3.   

    数据库服务器放在Linux上的
      

  4.   

    Provider修改为MSDAORA,还是不可以
      

  5.   

    //Before connect the oracle database,
    //you must setup the NET8 client program.
    strsql= _T("Provider=MSDAORA;User ID=");
    //strsql= _T("Provider=OraOLEDB.Oracle.1;User ID=");
    strsql+= sDbParam.strUserName;
    strsql+= _T(";PassWord=");
    strsql+= sDbParam.strPassword;
    /*strsql+= _T(";Initial Catalog=");
    strsql+= sDataThreadDbParam.sDatabaseParam.strDbName;*/
    strsql+= _T(";Data Source=");
    strsql+= sDbParam.strNetName;
      

  6.   


    //本地电脑Oracle版本是8.1,系统是2003;
    //远程服务器Oracle版本是9,系统是Linux.
    //使用PL-SQL能连接上,但是用程序连接不上。。//数据库连接字符串和代码如下:
    "Provider=OraOLEDB.Oracle.1;
    User ID=call;Password=call;
    Data Source='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
    (HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SID=orcl)))'"
    //只能初始化一次
    if((isInitCom==FALSE)&&(AfxOleInit() == 0))  
    {   isInitCom = TRUE; //被初始化一次,但是初始化失败
        return   FALSE;   
    }  
    else
    {   //成功初始化一次
     isInitCom = TRUE;
    }if(FAILED(pPtr.CreateInstance("ADODB.Recordset")))   
    {   return FALSE; 
    }   CString  strSRC;      
    strSRC=strConn; //数据库连接字符串

    //查询语句,测试查询语句没有问题
    CString strSQL = "select username,sendid,content from VOI_SendSound where content is not null and switchflag=0 and rownum<=10 and sendtime<sysdate";   
    _variant_t   varSRC(strSRC);   
    _variant_t   varSQL(strSQL);           if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))   
    {   return  FALSE; 
      

  7.   

    //执行该行代码出现错误
    if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))   
    {   return  FALSE; 
      

  8.   

    //Before connect the oracle database,
    //you must setup the NET8 client program.
    //NET8 client program,这个是指Oracle的客户端程序么?
    //没有看到在哪里设置服务器的IP和端口号???strsql= _T("Provider=MSDAORA;User ID=");
    strsql+= sDbParam.strUserName;  //连接数据库的用户名
    strsql+= _T(";PassWord=");      //连接数据库的密码   
    strsql+= sDbParam.strPassword;  
    strsql+= _T(";Data Source=");   //Data Source是什么???
    strsql+= sDbParam.strNetName;
      

  9.   

    测试环境下能连接数据库,真实环境下无法连接,
    但是PL-SQL都可以连接上服务器,
    也确定SQL语句是正确的。
    能否查看驱动程序的版本OraOLEDB.Oracle.1???真实环境下:
    本地电脑Oracle版本是8.1,系统是2003;
    远程服务器Oracle版本是9,系统是Linux.测试环境下:
    本地电脑Oracle版本是9,系统是XP;
    远程服务器Oracle版本是9,系统是XP.连接字符串如下
    "Provider=OraOLEDB.Oracle.1;
    User ID=call;
    Password=call;
    Data Source='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
    (HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SID=orcl)))'"
      

  10.   

    能否查看驱动程序的版本OraOLEDB.Oracle.1???
      

  11.   


    if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))   
    {   return  FALSE; 
    }
    改为:try 
    {
            pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText);        }catch (_com_error e)
    {
               //提取出错误代码

    return FALSE; }错误代吗是多少?
      

  12.   

    (1)
    用下面的方式捕获异常,是否可以?
    catch (_com_error e)
    {
       AfxMessageBox(e.ErrorMessage());
    }
    (2)是否需要手工注册:
    regsvr32 F:\oracle\ora92\bin\OraOLEDB.dll
    (3)如果用下面的连接方式的话:
    怎么指定服务器的IP呢 ???
    Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;
      

  13.   

    捕获到的异常:Unknown error 0x800A0E7A
    找了下Oralce的bin目录下没有OraOLEDB.dll这个库
      

  14.   

    问题解决了,
    因为Oracle8环境下缺少OraOLEDB.dll和依赖的相关文件,
    从Oracle9下拷贝过去注册下就可以了。