bool CSqlConn::Open(string strDbName, string strUser, string strPwd, string strServer, string strProvider) { try { HRESULT hr = m_pConn.CreateInstance(__uuidof(Connection)); if (FAILED(hr)) throw _com_error(hr); CStringW strConn; strConn.Format(L"Provider=%s;Data Source=%s;Initial Catalog=%s;User ID=%s;Password=%s;", hr = m_pConn->Open(_bstr_t(strConn), "", "", adConnectUnspecified)); if (FAILED(hr)) throw _com_error(hr); } catch (_com_error e) { wcout << "Failed to open database: " << e.ErrorMessage() << endl; return false; } return true; }错误的
时间: 2024-03-03 07:49:50 浏览: 89
这段代码存在一些问题,可能会导致编译错误或运行时错误。首先,`CStringW` 是 MFC 中的一个类,而这段代码没有包含 MFC 头文件,因此编译会失败。其次,`strConn.Format` 的语法也不正确,应该是 `strConn.Format(L"Provider=%s;Data Source=%s;Initial Catalog=%s;User ID=%s;Password=%s;", strProvider.c_str(), strServer.c_str(), strDbName.c_str(), strUser.c_str(), strPwd.c_str());`。最后,`m_pConn->Open` 的参数中缺少一个参数,应该是 `adModeUnknown`。因此,我建议您修改代码如下:
```
bool CSqlConn::Open(string strDbName, string strUser, string strPwd, string strServer, string strProvider) {
try {
HRESULT hr = m_pConn.CreateInstance(__uuidof(Connection));
if (FAILED(hr)) throw _com_error(hr);
CStringW strConn;
strConn.Format(L"Provider=%s;Data Source=%s;Initial Catalog=%s;User ID=%s;Password=%s;",
strProvider.c_str(), strServer.c_str(), strDbName.c_str(), strUser.c_str(), strPwd.c_str());
hr = m_pConn->Open(_bstr_t(strConn), "", "", adModeUnknown);
if (FAILED(hr)) throw _com_error(hr);
}
catch (_com_error e) {
wcout << "Failed to open database: " << e.ErrorMessage() << endl;
return false;
}
return true;
}
```
阅读全文