下面的代码可以连接Oracle 9g, 但是Oracel8g连接不上,
开发环境使用VC++6.0,连接数据库使用OLE DB方式;
请大家帮忙分析下原因,谢谢"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)))'"
开发环境使用VC++6.0,连接数据库使用OLE DB方式;
请大家帮忙分析下原因,谢谢"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)))'"
你8i和9i的两个实例都叫ORCL吗?
参数配置都相同,实例都叫ORCL。
这个是什么意思呢?
Provider=OraOLEDB.Oracle.1
http://download.oracle.com/docs/cd/B19306_01/win.102/b14311/toc.htm
不过是讲10g的
//本地电脑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;
}
但是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)))'"
因为Oracle8环境下缺少OraOLEDB.dll和依赖的相关文件,
从Oracle9下拷贝过去注册下就可以了。