网关诊断示例

在网关体系结构中,驱动程序将请求发送到支持 ODBC 的网关。 网关将请求发送到 DBMS。 因为它是与驱动程序管理器进行交互的组件,因此驱动程序会格式化并返回 SQLGetDiagRec 的参数。

例如,当 Oracle 的网关基于 Microsoft Open Data Services 上的 Rdb 时,如果 Rdb 找不到表 EMPLOYEE,该网关可能会生成此诊断消息:

"[42S02][-1][DEC][ODS Gateway][Rdb]%SQL-F-RELNOTDEF, Table EMPLOYEE is not defined "  
   "in schema."  

由于数据源中发生错误,网关向诊断消息添加了数据源标识符([Rdb])的前缀。 由于网关是与数据源进行交互的组件,因此它向诊断消息添加了供应商([DEC])和标识符([ODS 网关])的前缀。 它还将 SQLSTATE 值和 Rdb 错误代码添加到诊断消息的开头。 这允许它保留其自己的消息结构的语义,并且仍向驱动程序提供 ODBC 诊断信息。 驱动程序解析由网关附加到错误语句上的错误信息。

由于网关驱动程序是与驱动程序管理器接口的组件,因此它将使用前面的诊断消息格式化并返回 SQLGetDiagRec 中的以下值:

SQLSTATE:         "42S02"  
Native Error:      -1  
Diagnostic Msg:   "[DEC][ODS Gateway][Rdb]%SQL-F-RELNOTDEF, Table EMPLOYEE is not "  
                  "defined in schema."