处理错误和消息

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics 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(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 (11.x) 中添加的错误跟踪的增强功能的信息,请参阅访问扩展事件日志中的诊断信息

本节内容

另请参阅

SQL Server Native Client (ODBC)