如何利用_connectionptr同时连接多个数据库
数据库连接信息存储在:
typedef struct{
CString m_IpAddress; //数据库IP地址
CString m_DBName; //数据库的名字
CString m_DBUser; //用户名
CString m_DBPass; //密码
}DATABASEINFO,*pDATABASEINFO; //数据库信息列表
typedef std::map<CString,DATABASEINFO> DataBaseInfo;
typedef std::map<CString,DATABASEINFO>::iterator DataBaseInfoIt;
typedef std::vector <_ConnectionPtr> ConnectionList; //连接指针列表
ConnectionList m_ConnectionList;
目前自己写的代码:
DataBaseInfoIt It=theApp.m_DataBaseInfo.begin();
for(;It!=theApp.m_DataBaseInfo.end();It++)
{
HRESULT hr;
CString StrOpen;
_ConnectionPtr tempPtr ;
try
{
hr=tempPtr.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr))
{
tempPtr->Open("driver={SQL Server};Server=It->second.m_IpAddress;UID=It->second.m_DBUser;PWD=It->second.m_DBPass;DATABASE=It->second.m_DBName;","","",adConnectUnspecified);
m_ConnectionList.push_back(tempPtr);//加入全局列表
}
else
{
WriteLogFile("Create Connection ERROR!");
AfxMessageBox("打开数据库失败!");
return FALSE;
}
}
catch (_com_error e)
{
WriteLogFile("Catch ERROR!");
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
AfxMessageBox(e.ErrorMessage());
return FALSE;
}
}
return TRUE;
试运行发生错误,新手不懂,哪位大侠指教指教,或者有更好的办法,小女子不胜感激啊!!
[解决办法]
异常捕获改成这样看是什么错误。
try{//你的ADO代码}catch (_com_error& e){AfxMessageBox(e.Description());}
[解决办法]
连接多个数据库?不知道我这样说行不行哈。一般呢都是连接到master数据库。要使用到其他数据库的时候在vc中运行sql语句(use temp)就可以切换到到其他数据库了啊。所以不需要连接多个数据库啊
[解决办法]
"driver={SQL Server};Server=It->second.m_IpAddress;UID=It->second.m_DBUser;PWD=It->second.m_DBPass;DATABASE=It->second.m_DBName;",
你也太新手了!双引号里面都是常量字符串了,怎么可能正确呢?先正确赋值:
CString connStr;
connStr.Format(Driver={SQL Server};Server=%s;UID=%s;PWD=%s;DATABASE=%s;",It->second.m_IpAddress,It->second.m_DBUser,It->second.m_DBPass,It->second.m_DBName);
tempPtr->Open(_bstr_t(connStr),"","",adConnectUnspecified);