//读配置
GetPrivateProfileString("FILE","Data_name" ,"", tmp, 120, cfg_name.c_str());
Data_name=string(tmp);
GetPrivateProfileString("FILE","User_name" ,"", tmp, 120, cfg_name.c_str());
User_name=string(tmp);
GetPrivateProfileString("FILE","Password" ,"", tmp, 120, cfg_name.c_str());
Password=string(tmp);
CoInitialize(NULL);
string sConn;
sConn="Provider=MSDAORA.1;Persist Security Info=FalseData Source=";
sConn+=Data_name;
_bstr_t m_sConn=sConn.c_str();
_bstr_t Username=User_name.c_str();
_bstr_t password=Password.c_str();
pConn.CreateInstance(__uuidof(Connection));
pConn->CursorLocation =adUseClient;
HRESULT hr=pConn->Open(m_sConn,Username,password,adConnectUnspecified); //这里出错了 hr返回值
if(FAILED(hr))
{
string scon = m_sConn;
printf("不能连接数据库:%s\n",scon.c_str());
return -1;
}
pCmd.CreateInstance(__uuidof(Command));
pCmd->ActiveConnection=pConn;
GetPrivateProfileString("FILE","Data_name" ,"", tmp, 120, cfg_name.c_str());
Data_name=string(tmp);
GetPrivateProfileString("FILE","User_name" ,"", tmp, 120, cfg_name.c_str());
User_name=string(tmp);
GetPrivateProfileString("FILE","Password" ,"", tmp, 120, cfg_name.c_str());
Password=string(tmp);
CoInitialize(NULL);
string sConn;
sConn="Provider=MSDAORA.1;Persist Security Info=FalseData Source=";
sConn+=Data_name;
_bstr_t m_sConn=sConn.c_str();
_bstr_t Username=User_name.c_str();
_bstr_t password=Password.c_str();
pConn.CreateInstance(__uuidof(Connection));
pConn->CursorLocation =adUseClient;
HRESULT hr=pConn->Open(m_sConn,Username,password,adConnectUnspecified); //这里出错了 hr返回值
if(FAILED(hr))
{
string scon = m_sConn;
printf("不能连接数据库:%s\n",scon.c_str());
return -1;
}
pCmd.CreateInstance(__uuidof(Command));
pCmd->ActiveConnection=pConn;
_bstr_t bstr_myConnectString=myConnectString;
try
{
....
}
catch(_com_error &e)
{
isConnected_ = false;
//把error打出来 e.Description();
}
return true;
_bstr_t bstr_myConnectString=(char*)(myConnectString.c_str());
{
cfg_name=cfg_filename;
char tmp[1024];
GetPrivateProfileString("FILE","Data_name" ,"", tmp, 120, cfg_name.c_str());
Data_name=string(tmp);
GetPrivateProfileString("FILE","User_name" ,"", tmp, 120, cfg_name.c_str());
User_name=string(tmp);
GetPrivateProfileString("FILE","Password" ,"", tmp, 120, cfg_name.c_str());
Password=string(tmp);
CoInitialize(NULL); string sConn;
sConn="Provider=MSDAORA.1;Persist Security Info=FalseData Source=";
sConn+=Data_name;
_bstr_t m_sConn=_bstr_t(sConn.c_str());
bstr_t m_sConn=(char*)(sConn.c_str());
cout<<"m_sConn="<<m_sConn<<endl;
pConn.CreateInstance(__uuidof(Connection));//建立连接指针
pConn->CursorLocation =adUseClient;//连接方式
HRESULT hr=pConn->Open(m_sConn,_bstr_t(User_name.c_str()),_bstr_t(Password.c_str()),adConnectUnspecified); //打开连接
if(FAILED(hr))
{
string scon = m_sConn;
printf("不能连接数据库:%s\n",scon.c_str());
return -1;
}
pCmd.CreateInstance(__uuidof(Command)); //建立命令指针
pCmd->ActiveConnection=pConn; //激活这个命令指针
}
catch (_com_error &e)
{
printf("连接数据库失败Description = '%s'\n", (char*) e.Description());
return -1; }
return 0;
代码是这个
这个不一定能打出来吧。
你把sConn打出来就行啊。我们得看看它的内容,不然怎么判断是什么错。
你先用sqlplus <Username>/<password>@<datasource name>去连你的数据库吧,连通了,你的程序照着这三个参数改就完了。
_bstr_t 这里出问题 就是找不出什么问题