首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么利用_connectionptr同时连接多个数据库

2012-04-01 
如何利用_connectionptr同时连接多个数据库数据库连接信息存储在:typedef struct{CString m_IpAddress //

如何利用_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;

试运行发生错误,新手不懂,哪位大侠指教指教,或者有更好的办法,小女子不胜感激啊!!


[解决办法]
异常捕获改成这样看是什么错误。

C/C++ code
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);

 

热点排行