下面的代码可以连接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)))'"
请大家帮忙分析下原因,谢谢"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)))'"
解决方案 »
- VS2008如何删除消息及其响应函数
- 基于IOCP的多人聊天实现?
- 一个程序(如sqlserver)执行了的标志是什么?,怎么判断它是否执行?急。。。
- 急,关于窗口分割上。
- http://www.180cm.com/download/new/download.asp?id=452&downid=1怎么用网络快车下载
- NetCapture 网络截包源代码发送
- 200分 求教一个问题!开发数控机床 使用什么 编程语言和开发工具 ???
- 怎样将以前TC30下的程序在VC下编译
- 关于DirectShow中Source Filter的问题
- JS在非IE内核的浏览器中如何调用Activex控件的方法
- ★★我发现"多线程"程序根本不用设置临界区
- 散分 散分 散分 为过节 散分 - 继续散分
Provider=OraOLEDB.Oracle.1
//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;
//本地电脑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;
}
if(FAILED(pPtr->Open(varSQL,varSRC,adOpenStatic,adLockOptimistic,adCmdText)))
{ return FALSE;
}
//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;
但是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)))'"
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; }错误代吗是多少?
用下面的方式捕获异常,是否可以?
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;
找了下Oralce的bin目录下没有OraOLEDB.dll这个库
因为Oracle8环境下缺少OraOLEDB.dll和依赖的相关文件,
从Oracle9下拷贝过去注册下就可以了。