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;", CA2W(strProvider.c_str()), CA2W(strServer.c_str()), CA2W(strDbName.c_str()), CA2W(strUser.c_str()), CA2W(strPwd.c_str())); 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-04-27 20:22:53 浏览: 61
该函数的错误在于它没有处理异常的情况。当执行 `m_pConn.CreateInstance(__uuidof(Connection))` 或 `m_pConn->Open` 时,可能会抛出 _com_error 异常。如果出现异常,函数应该返回 false,但该函数没有处理异常并返回了 true。应该在 catch 块中添加 `return false;` 语句,以确保函数正确返回。
相关问题
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; }错误的
这段代码存在一些问题,可能会导致编译错误或运行时错误。首先,`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;
}
```
阅读全文