两天没进展了。到底哪里错了啊!

neusoftkkk 2016-09-04 08:23:39

程序运行时提示连接数据库失败。
异常提示为
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;
}


求各位大神看看哪里错了。求大家了。感谢!
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
neusoftkkk 2016-09-04
  • 打赏
  • 举报
回复
引用 2 楼 zyq5945 的回复:
估计是连接字符串错误,可以用这个方法试试获取连接字符串
我在哪里得到灵感,原来是我的ACCESS版本的问题是。m_bstrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\userDB.accdb"这个只能够接2003的不能接2007以上的版本的。多谢!
zyq5945 2016-09-04
  • 打赏
  • 举报
回复
估计是连接字符串错误,可以用这个方法试试获取连接字符串
liyunsheng2016 2016-09-04
  • 打赏
  • 举报
回复
你是要连ACCESS数据库吧, CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};uid=;pwd=123456;DBQ=D:\\仓库管理.mdb;"; //使用Open方法连接数据库 m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown); 试试这个字符串

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧