处理错误和消息

当应用程序调用 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(DB-Library for C)允许应用程序安装返回错误或消息的回调错误处理和消息处理函数。 某些 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 来检索消息数据。

有关跟踪错误的信息,请参阅 数据访问跟踪。 有关 SQL Server 2012 中添加的错误跟踪的增强功能的信息,请参阅 扩展事件日志中的“访问诊断信息”。

本节中

另请参阅

SQL Server Native Client (ODBC)