在编程中我使用ADO作为数据库的接口。程序运行过程中抛出了一些异常,我记录了下来。
如下:
Message: [INTERSOLV][ODBC SQL Server driver][SQL Server]HisData not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output)
ErrorCode: -2147217865Message:[INTERSOLV][ODBC SQL Server driver][SQL Server]Incorrect syntax near '*'
ErrorCode: -2147217900Message:[INTERSOLV][ODBC SQL Server driver][SQL Server]Foreign key constraint violation occurred, dbname =  'lscdatanew', table name = 'ParStation', constraint name = 'ParStation_SysAreaSet_foreign2'
ErrorCode: -2147467259现在我需要知道这些ErrorCode是在那里定义的?还有那些其它的ErrorCode?它们各自代表什么意思?因为目前程序需要对不同的错误采用不同的处理方式。
我搜索了网上的文章。大部分是在说明这些ErrorCode代表什么错误。发现如何处理。我也搜索了MSDN。在ADO 2.7 API Reference中有ErrorValueEnum资料,但是其中却没有找到我发现的这些ErrorCode。我也找过其它的一些论坛,都有没有找到满意怕答案。
我想有人应该遇到过和我同样的问题。如果你有什么样的建议,可以直接回复这贴子,也可以发Email:[email protected]
我很希望得到一些提示和帮助。
谢谢!

解决方案 »

  1.   

    他那个错误码是十进制的数吧, 你用了一场处理没?,如果用了直接看看异常的描述阿(Description)不知道你用的是什么开发环境, 但这个应该差不多吧, 还有异常的源(Source)。如果是C中,
             try
             {
                 // ..... your statements
             } 
    catch (_com_error &e)
    {
    printf("Error: \n");
    printf("Code = %08lx\n", e.Error());
    printf("Meaning = %s\n", e.ErrorMessage());
    printf("Source = %s\n", (LPCSTR)e.Source());
    printf("Description = %s\n", (LPCSTR)e.Description());
    }
      

  2.   

    如果是VB
    '' beginning place of your codes
    On Error Goto Err_Handler
      '' ..... your codes
    Err_Handler:
       Msgbox err.Source, err.Description
      

  3.   

    ErrorCode  对于不同的数据库应该有不同的意义(有一部分是公共的)。ADO只能把这个错误返回给你
    它也不知道errorcode 是什么意思吧
    那个source, description来自IErrorInfo,如果你自己写过支持COM Exception的程序,就知道那个errorcode不会在ADO文档中定义了
      

  4.   

    我文章里的那些信息都是我通过try catch得到的。我使用的是CB5的TADOConnection,TADOCommand控件来操作的。我需要知道ErrorCode的定义是因为我希望能够不同的错误进行不同的处理。比如:“插入记录复”这样SQL语句我可以直接扔掉;“程序与数据库通信不正常”这样错误我应停止程序并记人来处理;“SQL语法错误”这样的我只需要记录下到文件中。原来程序里采用的方式是把所有的异常记入记录文件。可是在实际应用中这不理想,对于很严重的错误(数据库异常)要拖延很久以后才会发现,对于简单的错误(插入重复记录)又根本不用记录到文件。只有Source和Description我不能很好的处理。
      

  5.   

    我没有写过COM的Exception程序。关于COM的Exception的处理能给点建议吗?
      

  6.   

    在Watch窗口中输入@ERR,x
    即可以显示错误的十六进制码,然后到winerror.h文件中找错误说明。
      

  7.   

    谢谢楼上的建议。我在winerror.h中找到了,错误的定义。0x80004005  Unspecified error。这个ErrorCode是我再Exception中得到的。我再MSDN中看ADO 2.7 API Reference的,ErrorValueEnum篇,上面说明的ErrorCode分为三种类型的值WORD,十进制整型,十六进制整型。我程序如何得到哪些ErrorCode?
      

  8.   

    目前我遇到一个很麻烦的问题。
    执行SQL: select * from1 HisData
    返回:[INTERSOLV][ODBC SQL Server driver][SQL Server]Incorrect syntax near '*'
    ErrorCode: -2147217900
    执行SQL:INSERT INTO  ParStation(LscNo, SuNo, AreaNo, SuName, SuAddr, IpAddr, ComType, Port, ComPar, ReMark)  VALUES(3, 252, 101188864, '4号服务器程?, '', '0.0.0.0', 0, '0','','')
    返回:[INTERSOLV][ODBC SQL Server driver][SQL Server]Incorrect syntax near '0.0'
    ErrorCode: -2147467259而在我的断开网络执行一条正确的SQL语句
    SQL:select * from ParStation;
    返回:[INTERSOLV][ODBC SQL Server driver][SQL Server]ct_cmd_drop(): user api layer: external error: This routine cannot be called because the command structure is in an undefined state
    ErrorCode :-2147467259一样的ErrorCode使得我在程序中不知道如何处理才好。因为程序是在无人值班的地方运行。它是连接远程的监控终端,发现错误后需要反馈给终端程序,让维护人员来处理。如果把这些E文的Description全部扔过去并不利于处理。所以需要根据ErrorCode来判断,再进行分类处理。
    或许我该换一种方式来解决问题,大家能点建议吗?谢谢。
      

  9.   

    INSERT INTO  ParStation(LscNo, SuNo, AreaNo, SuName, SuAddr, IpAddr, ComType, Port, ComPar, ReMark)  VALUES(3, 252, 101188864, '4号服务器程?, '', '0.0.0.0', 0, '0','','')
    看上去似乎第四个字符串少了个  ’
    字符串不完整
      

  10.   

    select * from1 HisData如果原来的语句是这个肯定会错啊
    楼主请看清楚了
      

  11.   

    谢谢!
    那些SQL语句是用来测试ADO 返回的ErrorCode用的。