程序运行时提示连接数据库失败。
异常提示为
TS.exe 中的 0x767d5b68 处最可能的异常: Microsoft C++ 异常: 内存位置 0x00afe6ac 处的 _com_error。
TS.exe 中的 0x767d5b68 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x00afe6ac 处的 _com_error。
然后我追踪到代码m_pRecordSet->Open(m_sqlCmd, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);这里。
源代码
#include "StdAfx.h"
#include "DBManager.h"
DBManager::DBManager(void)
{
m_pConnection = NULL;
m_pRecordSet = NULL;
DBConnect();
}
DBManager::~DBManager(void)
{
}
void DBManager::DBConnect()
{
//初始化COM组件
::CoInitialize(NULL);
HRESULT hr = NULL;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection"); //创建 Connection 对象
if (SUCCEEDED(hr))
{
/*m_pConnection->ConnectionString = "driver={SQL Server};server=DESKTOP-TE2N11V\\LOGO;uid=sa;pwd=123;";
m_pConnection->Open("","","",adConnectUnspecified);
m_pConnection->DefaultDatabase = "chatDatabase";*/
hr = m_pConnection.CreateInstance("ADODB.Connection");
m_bstrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\userDB.accdb";
hr = m_pConnection->Open(m_bstrConn, "", "", adModeUnknown);
}
else
{
AfxMessageBox(_T("创建 Connection 对象失败"));
}
}
catch (_com_error e)
{
CString strErr;
strErr.Format("连接数据库失败\n%s",e.ErrorMessage());
AfxMessageBox(strErr);
}
}
void DBManager::GetRecordSet(CString bstrSqlCmd)
{
m_sqlCmd = _bstr_t(bstrSqlCmd);
m_pRecordSet.CreateInstance(__uuidof(Recordset));
m_pRecordSet->Open(m_sqlCmd, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
}
void DBManager::ExcuteCmd(CString bstrSqlCmd)
{
m_sqlCmd = _bstr_t(bstrSqlCmd);
_variant_t RecordsAffected;
try{
m_pRecordSet = m_pConnection->Execute(m_sqlCmd, &RecordsAffected, adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
}
void DBManager::DBClose()
{
if (m_pRecordSet != NULL)
{
m_pRecordSet->Close();
}
m_pConnection->Close();
::CoUninitialize();
}
BOOL DBManager::LoginAuthentication(CString userName, CString password)
{
return FALSE;
}
BOOL DBManager::Registe(CString userName, CString password, CString sex)
{
return FALSE;
}
CString DBManager::getPasswordForUserName(CString userName)
{
return NULL;
}
求各位大神看看哪里错了。求大家了。感谢!