VS2012 MFC连接SQLserver2008 出现崩溃问题 希望知道原因的大侠帮助我

popoppoaw 2014-07-09 04:51:08
本人菜鸟想做MFC连接数据库的小程序,网上找了一些教程,废话不多说,我直接说问题
编译不报错,一运行就崩溃,不知道是不是指针初始化的问题



调试追踪情况是这一句崩溃的


到下面这一步再下去就崩溃了





以下是连接数据库的代码,大侠们帮忙看看我哪错了

在stdafx.h中添加了代码
#import "c:\Program Files\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")rename("BOF", "adoBOF")

void CfaceDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
_ConnectionPtr pMyConnect = NULL;
HRESULT hr = pMyConnect.CreateInstance(__uuidof(Connection));
if (FAILED(hr))
return;
//初始化链接参数
_bstr_t strConnect = "Provider=SQLOLEDB;Server=li-PC;Database=face;uid=root; pwd=123456;"; //Database指你系统中的数据库
//执行连接
try
{
// Open方法连接字串必须四BSTR或者_bstr_t类型
pMyConnect->Open(strConnect, "", "", NULL);
}
catch(_com_error &e)
{

MessageBox(e.Description(), _T("警告"), MB_OK|MB_ICONINFORMATION);
}//发生链接错误

//定义_RecordsetPtr变量,调用它Recordset对象的Open,即可打开一个数据集
//初始化过程 以下是个实例
_RecordsetPtr pRecordset;
if (FAILED(pRecordset.CreateInstance(__uuidof(Recordset))))
{
return;
}
//执行操作
try
{
pRecordset->Open(_variant_t("t_face"),
_variant_t((IDispatch*)pMyConnect),
adOpenKeyset, adLockOptimistic, adCmdTable);
}
catch (_com_error &e)
{
MessageBox(e.Description(), _T("无法打开t_face表"), MB_OK|MB_ICONINFORMATION);
}

pMyConnect.CreateInstance(__uuidof(Connection));
//初始化Connection指针
pRecordset.CreateInstance(__uuidof(Recordset));
//初始化Recordset指针

CString strSql("select * from t_face");//具体执行的SQL语句
pRecordset=pMyConnect->Execute(_bstr_t(strSql),NULL,adCmdText);//将查询数据导入m_pRecordset数据容器

while(!pRecordset->adoEOF)//遍历并读取name列的记录并输出
{
CString temp = (TCHAR *)(_bstr_t)pRecordset->GetFields()->GetItem ("name")->Value;
AfxMessageBox(temp);
pRecordset->MoveNext();
}

}
...全文
83 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lis2012 2014-07-10
  • 打赏
  • 举报
回复
引用 2 楼 popoppoaw 的回复:
[quote=引用 1 楼 lis2012 的回复:] pMyConnect.CreateInstance(__uuidof(Connection)); //怎么把连接进行了初始化 把这一句注释掉 //初始化Connection指针 pRecordset.CreateInstance(__uuidof(Recordset)); //初始化Recordset指针 CString strSql("select * from t_face");//具体执行的SQL语句 pRecordset=pMyConnect->Execute(_bstr_t(strSql),NULL,adCmdText);//将查询数据导入m_pRecordset数据容器
谢谢你,程序不报错了,可惜执行不出来结果 能不能再帮我看看 最后那个while语句为什么不执行,查找不到结果?[/quote]

       if (pMyConnect== NULL)
            return;
	_variant_t vRecsAffected ;
	try
	{
		pRecordset= pMyConnect->Execute(strSql,
			           &vRecsAffected,
			           adOptionUnspecified) ; 
	}
	catch(_com_error e)
	{
		pRecordset= NULL;
	}
        
        while(!(pRecordset->adoEOF || pRecordset->BOF))
	 {
                        _variant_t var = pRecordset->GetCollect(_T("name"));
		   	if (var.vt == VT_BSTR)   //要是字符串类型才可以  如果是其他类型 请填写其他类型
			{
				CString temp(var.bstrVal);
                                  AfxMessageBox(temp);   
			}
                        pRecordset->MoveNext();                          
         }


popoppoaw 2014-07-09
  • 打赏
  • 举报
回复
引用 1 楼 lis2012 的回复:
pMyConnect.CreateInstance(__uuidof(Connection)); //怎么把连接进行了初始化 把这一句注释掉 //初始化Connection指针 pRecordset.CreateInstance(__uuidof(Recordset)); //初始化Recordset指针 CString strSql("select * from t_face");//具体执行的SQL语句 pRecordset=pMyConnect->Execute(_bstr_t(strSql),NULL,adCmdText);//将查询数据导入m_pRecordset数据容器
谢谢你,程序不报错了,可惜执行不出来结果 能不能再帮我看看 最后那个while语句为什么不执行,查找不到结果?
lis2012 2014-07-09
  • 打赏
  • 举报
回复
pMyConnect.CreateInstance(__uuidof(Connection)); //怎么把连接进行了初始化 把这一句注释掉 //初始化Connection指针 pRecordset.CreateInstance(__uuidof(Recordset)); //初始化Recordset指针 CString strSql("select * from t_face");//具体执行的SQL语句 pRecordset=pMyConnect->Execute(_bstr_t(strSql),NULL,adCmdText);//将查询数据导入m_pRecordset数据容器

4,011

社区成员

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

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