vc数据库的简单问题

shuihan20e 2012-08-16 04:07:42
一段SQL语句放到一个类里面出错,如果写到事件里却没问题,新手求救
一个CDB类,把数据库操作封装

int CDB::AddData(const CString strSQL)
{
cmd->CommandText=_bstr_t(strSQL);
try
{
cmd->Execute(NULL,NULL,adCmdText);
con->CommitTrans();
return 1;
}
catch (_com_error e)
{
//CString err;
//err.Format(_T("%s"));
//AfxMessageBox(err);
con->RollbackTrans();
return -1;
}
}
//在一个窗体里调用却出错
CDB db;
int i;
i=db.AddData(_T("INSERT INTO DevType VALUES (832,'743','44faderfa')"));
if (i==1)
{
AfxMessageBox(_T("success"));
}
else
{
AfxMessageBox(_T("failure"));
}


这样出错

_CommandPtr cmd;
cmd.CreateInstance("adodb.command");
cmd->ActiveConnection=theApp.con;
cmd->CommandText=_bstr_t("INSERT INTO DevType VALUES (823,'232','232')");
cmd->Execute(NULL,NULL,adCmdText);

SQL语句没错,字段也对应,数据库连接成功,不存在主键冲突问题
...全文
130 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuihan20e 2012-08-17
  • 打赏
  • 举报
回复
紧急求助
shuihan20e 2012-08-17
  • 打赏
  • 举报
回复
紧急求助
shuihan20e 2012-08-17
  • 打赏
  • 举报
回复
我在工程文件里已经初始化了

try
{
AfxOleInit();
}
catch(_com_error e)
{
CString err;
err.Format(_T("Initialize OLE Fail:%s"),e.ErrorMessage());
AfxMessageBox(err);
}

数据库也连接成功了

try
{
con.CreateInstance(_uuidof(Connection));
}
catch (_com_error e)
{
CString err;
err.Format(_T("Create Connection Error:%s"),e.ErrorMessage());
AfxMessageBox(err);
}

try
{
con->Open(_bstr_t("Provider=OraOLEDB.Oracle.1;Password=cvicse2;Persist Security Info=True;User ID=mtws;Data Source=mtws"),"","",-1);
AfxMessageBox(_T("open database success"));
//return 0;
}
catch (_com_error e)
{
CString err;
err.Format(_T("Open Database Error:%s"),e.ErrorMessage());
//return -1;
//AfxMessageBox(err);
}

try
{
cmd.CreateInstance("ADODB.Command");
cmd->ActiveConnection=con;
}
catch (_com_error e)
{
CString err;
err.Format(_T("Create Command Error:%s"),e.ErrorMessage());
AfxMessageBox(err);
}
shuihan20e 2012-08-17
  • 打赏
  • 举报
回复
解决了
con->CommitTrans();
con->RollbackTrans();
这两句注释掉就不报错了
hdg3707 2012-08-17
  • 打赏
  • 举报
回复
你单步执行,看db这个变量是否有效,如果有效,就跟踪到AddData函数里,看是哪句有问题
另个,AfxOleInit();这条语句在类时里的初始化里加,不要在try里加,如果一定要在try里加,最好延时几毫秒,已有人发现这个问题了,好象是初始化OLD需要点时间
hdg3707 2012-08-16
  • 打赏
  • 举报
回复
你这个CDB类是不是有构造函数,是不是构造函数里有初始化的变量.比如需要初始化OLE等

16,471

社区成员

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

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

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