为了访问数据库方便,我将ADO访问数据库的一些基本操作进行了封装。调用rs->AddNew();插入一条新的记录,然后对字段分别赋值,最后rs->Update();提交。
char*
CAdo::insertDB()
{
char *ret = "error";
try
{
if(!apsRef_rs->Supports(adAddNew))
{
cout << "The Recordset doesn't support the AddNew() method!" << endl;
return ret;
}
rs->AddNew();
rs->PutCollect("Name", _variant_t( name() ) );
rs->PutCollect("StuNo", _variant_t( stuno() ) ); rs->Update();
}
// ORACLE Error
//
catch(_com_error &e)
{
return (char*)(e.ErrorMessage());
}
return ( NULL );
}
int main()
{
......// 已经完成了登录数据库等初始化!
/************************* Call the method readDB ****************************/
char *dbMessage;
CAdo myAdo;
dbMessage = myAdo.readDB();// 读取记录正确! if ( dbMessage )
{
cout << dbMessage << " ReadDB ERROR!" << endl;
}
else
{
cout << "Student Name: " << myAdo.name()<< " Student No.: " << myAdo.stuno() << endl;
}
/************************* Call the method insertDB *************************/
if(!(myAdo.insertDB()))// 插入记录成功!
{
cout << "insertDB OK!" << endl;
}
myAdo.getrs()->MoveFirst(); // 不管有没有这句,下面读取新插入的记录都发生错误!!!
dbMessage = myAdo.readDB(); if ( dbMessage )
{
cout << dbMessage << " ReadDB ERROR!" << endl;
}
else
{
cout << "Student Name: " << myAdo.name()<< " Student No.: " << myAdo.stuno() << endl;
} return 0;
}
我经过多次测试,问题大概出在:对于新插入的记录,不能成功读取。插入记录后是不是需要刷新等操作,才能对新记录进行操作?
在线等......
char*
CAdo::insertDB()
{
char *ret = "error";
try
{
if(!apsRef_rs->Supports(adAddNew))
{
cout << "The Recordset doesn't support the AddNew() method!" << endl;
return ret;
}
rs->AddNew();
rs->PutCollect("Name", _variant_t( name() ) );
rs->PutCollect("StuNo", _variant_t( stuno() ) ); rs->Update();
}
// ORACLE Error
//
catch(_com_error &e)
{
return (char*)(e.ErrorMessage());
}
return ( NULL );
}
int main()
{
......// 已经完成了登录数据库等初始化!
/************************* Call the method readDB ****************************/
char *dbMessage;
CAdo myAdo;
dbMessage = myAdo.readDB();// 读取记录正确! if ( dbMessage )
{
cout << dbMessage << " ReadDB ERROR!" << endl;
}
else
{
cout << "Student Name: " << myAdo.name()<< " Student No.: " << myAdo.stuno() << endl;
}
/************************* Call the method insertDB *************************/
if(!(myAdo.insertDB()))// 插入记录成功!
{
cout << "insertDB OK!" << endl;
}
myAdo.getrs()->MoveFirst(); // 不管有没有这句,下面读取新插入的记录都发生错误!!!
dbMessage = myAdo.readDB(); if ( dbMessage )
{
cout << dbMessage << " ReadDB ERROR!" << endl;
}
else
{
cout << "Student Name: " << myAdo.name()<< " Student No.: " << myAdo.stuno() << endl;
} return 0;
}
我经过多次测试,问题大概出在:对于新插入的记录,不能成功读取。插入记录后是不是需要刷新等操作,才能对新记录进行操作?
在线等......
try
{
//你的代码
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
}
看看能否捕获异常??
没问题,我的代码都放在了try catch块中了,这里为了说明问题,只把有问题的部分贴了出来!
没问题,我的代码都放在了try catch块中了,这里为了说明问题,只把有问题的部分贴了出来!
光标指向了msado15.tli文件的1571行,如下所示:
inline HRESULT Recordset15::MoveFirst ( ) {
HRESULT _hr = raw_MoveFirst();
if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
return _hr;// 光标指向这里!
}
另外,把你异常信息提示中的e.ErrorMessage改成e.Description再看看