我在VC中用ADO连接ORACLE数据库时,用了很多种方法但是都是出现异常。我用断点调试时,代码如下
_ConnectionPtr m_pConnection;
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance(__uuidof(Connection)); if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Data Source=oradba;UID=neutorisk;PWD=790505","","",0);///连接数据库
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
//写入日志
AfxMessageBox(errormessage);//显示错误信息
exit(0);
}
当调式到if(SUCCEEDED(hr))这个语句时总是为假,是不是意味着创建的连接实例没有成功啊??各位朋友是否能帮帮我啊??
_ConnectionPtr m_pConnection;
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance(__uuidof(Connection)); if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Data Source=oradba;UID=neutorisk;PWD=790505","","",0);///连接数据库
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
//写入日志
AfxMessageBox(errormessage);//显示错误信息
exit(0);
}
当调式到if(SUCCEEDED(hr))这个语句时总是为假,是不是意味着创建的连接实例没有成功啊??各位朋友是否能帮帮我啊??
解决方案 »
- pc和单片机通信
- 分享一个读写锁,其实是想大家帮忙测试下
- 关于折线向外等距离扩充的算法,急啊,在线等........................................................
- 用WIN32 API的waveInOpen函数写音频录制,怎样指定Linein还是mic
- 用CAsyncSocket创建UDP的socket,收到数据后,怎么得知客户的IP和端口号?
- 我使用ADO COM操作数据库, 当我有1000个线程同时操作时候, 内存疯涨
- 求救:以16进制格式输出文件
- 一个小问题,关于程序的VIEW应该继承什么
- 如何避开Proxy的防火墙
- 菜鸟提问:我用vs2008打开一个exe文件
- 一个SDI程序,视图的基类为CRichEditView,如何改变字体及颜色
- 各位兄弟,我想问一下用程序实现,在打开的网页指定位置输入自己所需要的内容,,小弟谢谢了
strConn="Provider=MSDAORA.1;user id=test;password=tese;Data Source=oracledb;persist security=false"; HRESULT hr;
try
{
hr=m_pConn.CreateInstance(__uuidof(Connection));
if(SUCCEEDED(hr))
{
m_pConn->Open(strConn.AllocSysString(),"","",adModeUnknown);
AfxMessageBox("已成功连接");
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
try
{
_bstr_t rsStr="select * from 日志记录";
m_pRs.CreateInstance(__uuidof(Recordset));
m_pRs->Open(rsStr,_variant_t((IDispatch *)m_pConn, true),adOpenStatic,
adLockOptimistic,
adCmdText);
m_pRs->MoveFirst();
while(!m_pRs->EndOfFile)
{
m_list.AddString((char*)(_bstr_t)m_pRs->GetCollect("HH_NAME"));
m_pRs->MoveNext();
}
UpdateData(false);
}
catch(_com_error e)///捕捉异常
{
AfxMessageBox("读取数据库失败!");///显示错误信息
}
if(SUCCEEDED(hr))
代码时SUCCEEDED(hr)仍然返回一个假值,这是怎么回事,是不是别的什么原因??
使用前得 #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")
使用前得 初始化环境 : CoInitialize(NULL);
使用标准安全级别:
strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;");
使用信任连接
1.strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=/;Password=;"); UID为'/'
2.strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;OSAuthent=1;");使用OSAuthent=1
对于连接字符串可以参考以下网页: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdreforacleprovspec.asp?frame=true
http://download-west.oracle.com/otndoc/oracle9i/901_doc/win.901/a90171/using.htm
===>ODBC 配置数据源
strConnect = _T("DSN=ADOTest");
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")程序开始
CoInitialize(NULL);这两个步骤是必须的,你做过没有
::CoInitialize(NULL)