VC的ado中如何获得数据库服务器信息?

lamyx 2002-04-15 12:36:01
在数据库连接,执行SQL或转换缺省数据库时,服务器都会返回一些系统信息(不一定是错误信息),在DB_Library或ODBC中通过信息处理程序可得到这些服务器信息。但在ADO中只有在执行出错时抛出_com_error进行意外处理才能得到服务器错误信息。不知ADO在没有错误(没有抛出意外)时如何得到服务器的这些信息?
我在用ADO使用存储过程时遇到这样的问题:在存储过程中有一句Insert的SQL语句,同时在插入的表中定义了主键,在插入两个相同主键时会出错。我在执行这个存储过程中插入了重复主键,在MS SQL数据库操作时AOD会抛出_com_error,但在使用Sybase的OLE DB时却不会抛出_com_error,程序如常执行完毕,而在ADO程序中又不知道如何得到服务器的信息(这种错误应该在数据库信息中有反映),如果不在存储过程中的Inser后调用if (@@error<>0)来判断,根本不知道执行的存储过程是否出错。
...全文
30 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
herosword 2002-04-15
  • 打赏
  • 举报
回复
ADO是依靠_com_error,来判断是否提交一个command得到成功的返回,
ADO的函数是 HRESULT 作为返回码,你可以通过catch( _com_error &e )
来得到错误信息。
try
{
long lErrorCount = m_IConnection->Errors->Count;
memset( m_ErrorMessage, 0, sizeof( m_ErrorMessage ) );
for( long i = 0; i < lErrorCount; i ++ )
{
pError = m_IConnection->Errors->GetItem( i );
sprintf( m_ErrorMessage, "数据库错误:(%s)",
_com_util::ConvertBSTRToString( pError->Description ) );
Error( m_ErrorMessage );
}
}
catch( _com_error &e )
{
GetCOMError( e );
}
lamyx 2002-04-15
  • 打赏
  • 举报
回复
但服务器返回系统信息并不一定是错误信息,我试过在Open或Excute后,只要成功(包括上述Sybase存储过程错误),m_IConnection->Errors->Count都不大于零,也没有抛出_com_error的意外,自然得不到系统信息 。但这些信息在ODBC或db_library里都能得到。
另外请问catch(_com_error &e)与catch(_com_error e)有区别吗?

4,011

社区成员

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

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