处理错误和消息
当应用程序调用 ODBC 函数时,驱动程序执行该函数,并以两种方式返回诊断信息:返回代码指示 ODBC 函数总体成功或失败,诊断记录提供有关函数的详细信息。 诊断记录包含标题记录和状态记录。 即使该函数成功,也仍将至少返回一条诊断记录,即标题记录。
诊断信息用于在开发时捕获编程错误,例如硬编码的 SQL 语句中的无效句柄和语法错误。 此外,该信息还用于在运行时捕获运行时错误和警告,例如用户输入的 SQL 语句中的数据截断、规则冲突和语法错误。 程序逻辑通常基于返回代码。
例如,在应用程序调用 SQLFetch 以检索结果集中的行之后,返回代码指示是否已达到结果集末尾 (SQL_NO_DATA)、是否返回任何信息性消息 (SQL_SUCCESS_WITH_INFO),或者是否发生错误 (SQL_ERROR)。
如果 SQL Server Native Client ODBC 驱动程序返回 SQL_SUCCESS 以外的内容,应用程序可以调用 SQLGetDiagRec 来检索任何信息性消息或错误消息。 如果存在多个消息,使用 SQLGetDiagRec 可以上下滚动消息集。
返回代码 SQL_INVALID_HANDLE 始终指示编程错误,并且决不能在运行时遇到。 所有其他返回代码提供运行时信息,但 SQL_ERROR 可以指示编程错误。
原始 Microsoft SQL Server 本机 API 为 C 语言中的 DB-Library,它允许应用程序安装返回错误或消息的回调错误处理和消息处理函数。 某些 Transact-SQL 语句(如 PRINT、RAISERROR、DBCC 和 SET)将其结果返回到 DB-Library 消息处理程序函数,而不是结果集。 但是,ODBC API 不具备这种回调功能。 当 SQL Server Native Client ODBC 驱动程序检测到由 SQL Server 返回的消息时,它将 ODBC 返回代码设置为 SQL_SUCCESS_WITH_INFO 或 SQL_ERROR,并将消息作为一个或多个诊断记录返回。 因此,ODBC 应用程序必须仔细测试这些返回代码,并调用 SQLGetDiagRec 检索消息数据。
有关跟踪错误的详细信息,请参阅 Data Access Tracing(数据访问跟踪)。 有关 SQL Server 2012 中添加的错误跟踪增强功能的信息,请参阅访问扩展事件日志中的诊断信息。