数据库连接出错,高手求救!!

yeyuanzhi2000 2008-03-30 11:33:46
我封装一个ADOConn类:
void ADOConn::OnInitADOConn()
{
try
{
::CoInitialize(NULL);
m_pConnection=NULL;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->ConnectionString="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=WaterDB.mdb;";
m_pConnection->Open(L"",L"",L"",adCmdUnspecified);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
}

_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
e.Description();
}
return m_pRecordset;
}

BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
try
{
if(m_pConnection==NULL)
OnInitADOConn();
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
e.Description();
return false;
}
}

void ADOConn::ExitConnect()
{
m_pRecordset->Close();
m_pConnection->Close();
m_pRecordset=NULL;
m_pConnection=NULL;
::CoUninitialize();
}
用查询没问题,但当我用insert into语句时,
ADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
CString sql,code,name,type,price,num,date;
m_code.GetWindowText(code);
m_name.GetWindowText(name);
m_type.GetWindowText(type);
m_price.GetWindowText(price);
m_num.GetWindowText(num);
m_date.GetWindowText(date);
sql.Format("insert into product values('%s','%s','%s','%s','%s','%s')",code,name,type,price,num,date);
_RecordsetPtr m_pRecordset;
m_pRecordset=m_AdoConn.GetRecordSet((_bstr_t)sql);
m_AdoConn.ExitConnect();
添加成功了,但还有错误的提示:
This application has requested the Runtime to terminate it in an unusual way.Please contact the application's support team for more information.怎么会这样?如何修改?高手请赐教!谢谢!!!
...全文
87 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
闪破风浪 2008-03-30
  • 打赏
  • 举报
回复
晚上回来再看看,
马上要出去了。。。
yeyuanzhi2000 2008-03-30
  • 打赏
  • 举报
回复
谢谢!!不过还有问题啊,我有源码,哪位高手能不能帮我调试?谢谢!!
http://bbs.bccn.net/viewthread.php?tid=206021&extra=page%3D1&frombbs=1
用户yeyuanzhi密码8234663
LWYY52243548 2008-03-30
  • 打赏
  • 举报
回复
m_pRecordset->Close();
m_pConnection->Close();
m_pRecordset=NULL;
m_pConnection=NULL;
::CoUninitialize();

改成:
m_pRecordset.Release();
m_pConnection.Release();
::CoUninitialize();
闪破风浪 2008-03-30
  • 打赏
  • 举报
回复
::CoInitialize(NULL);
::CoUninitialize();
在同一函数内使用,不要跨函数。。。。。
配对使用的。。。。。
yeyuanzhi2008 2008-03-30
  • 打赏
  • 举报
回复
hurryboylqs,你真是高手.谢谢!!
hurryboylqs 2008-03-30
  • 打赏
  • 举报
回复

void ADOConn::ExitConnect()
{
//m_pRecordset->Close();你用insert into并不是执行查询,只是SQL插入数据,没有记录返回给你的,
//所以执行类似的语句用Connection对象或者_CommandPtr 来执行即可
m_pConnection->Close();
m_pRecordset.Release();
m_pConnection.Release();
::CoUninitialize();
}
hurryboylqs 2008-03-30
  • 打赏
  • 举报
回复
很明显,你的记录集是空的,关闭当然会runtime error ,这也许是ADO的一个bug吧,总之你close的记录集不能为空
yeyuanzhi2008 2008-03-30
  • 打赏
  • 举报
回复
谁知道,很急啊!!要分我加

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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