处理错误和消息
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW)
当应用程序调用 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 的数据库库)允许应用程序安装返回错误或消息的回调错误处理和消息处理函数。 某些 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 (11.x) 中添加的错误跟踪的增强功能的信息,请参阅访问扩展事件日志中的诊断信息。