解决不一致的 ODBC 连接问题

解决不一致的 ODBC 连接问题

我正在尝试将 UPS WorldShip 与 SQL Server 2008 R2 数据库集成,但连接非常不稳定。UPS 声称这是 DSN/Windows 问题,但我无法说服他们。

集成非常简单:我的送货员单击一个按钮,打开一个表单,输入订单号。按下回车键后,将从数据库中提取该订单号的送货信息。

问题是 WorldShip 经常认为 DSN 不存在。但是,我可以打开 WorldShip 的自定义工具并浏览我的 DSN 所连接的数据库中的所有表和字段,这至少意味着我的 DSN 确实存在。

之所以很难排除故障,是因为问题没有一致性,我无法可靠地重复任何行为。也就是说,重新启动 PC 不会导致连接中断,打开集成工具并查看表格和字段不会导致集成按钮工作。

有没有什么方法可以帮助我监视来自 SQL 服务器的此连接或获取有关其失败原因的任何线索?

应 TallTed 的要求,这是我创建的跟踪文件的一个示例。仅仅 5 小时后,跟踪文件就超过 130MB,因此我无法提供完整的文件。

WorldShipTD     d94-690 EXIT  SQLSetStmtAttrW  with return code -1 (SQL_ERROR)
        SQLHSTMT            0x0C6632A0
        SQLINTEGER                1227 <unknown>
        SQLPOINTER          [Unknown attribute 1227]
        SQLINTEGER                  -5 

        DIAG [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed (0) 

WorldShipTD     d94-690 ENTER SQLAllocHandle 
        SQLSMALLINT                  3 <SQL_HANDLE_STMT>
        SQLHANDLE           0x0C662FC0
        SQLHANDLE *         0x03EBCE38

WorldShipTD     d94-690 EXIT  SQLAllocHandle  with return code 0 (SQL_SUCCESS)
        SQLSMALLINT                  3 <SQL_HANDLE_STMT>
        SQLHANDLE           0x0C662FC0
        SQLHANDLE *         0x03EBCE38 ( 0x0C6632A0)

WorldShipTD     d94-690 ENTER SQLSetStmtAttrW 
        SQLHSTMT            0x0C6632A0
        SQLINTEGER                   0 <SQL_ATTR_QUERY_TIMEOUT>
        SQLPOINTER                30
        SQLINTEGER                  -5 

WorldShipTD     d94-690 EXIT  SQLSetStmtAttrW  with return code -1 (SQL_ERROR)
        SQLHSTMT            0x0C6632A0
        SQLINTEGER                   0 <SQL_ATTR_QUERY_TIMEOUT>
        SQLPOINTER                30
        SQLINTEGER                  -5 

        DIAG [HYC00] [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented  (106) 

WorldShipTD     d94-690 ENTER SQLGetDiagFieldW 
        SQLSMALLINT                  3 
        SQLHANDLE           0x0C6632A0
        SQLSMALLINT                  1 
        SQLSMALLINT                  4 
        SQLPOINTER         0x00520708
        SQLSMALLINT                 12 
        SQLSMALLINT *       0x0028E2A8

WorldShipTD     d94-690 EXIT  SQLGetDiagFieldW  with return code 0 (SQL_SUCCESS)
        SQLSMALLINT                  3 
        SQLHANDLE           0x0C6632A0
        SQLSMALLINT                  1 
        SQLSMALLINT                  4 
        SQLPOINTER         0x00520708
        SQLSMALLINT                 12 
        SQLSMALLINT *       0x0028E2A8 (10)

WorldShipTD     d94-690 ENTER SQLGetInfoW 
        HDBC                0x0C662FC0
        UWORD                       77 <SQL_DRIVER_ODBC_VER>
        PTR                 0x03EBCEDC 
        SWORD                      100 
        SWORD *             0x0028E290

WorldShipTD     d94-690 EXIT  SQLGetInfoW  with return code 0 (SQL_SUCCESS)
        HDBC                0x0C662FC0
        UWORD                       77 <SQL_DRIVER_ODBC_VER>
        PTR                 0x03EBCEDC [      10] "03.51"
        SWORD                      100 
        SWORD *             0x0028E290 (10)

WorldShipTD     d94-690 ENTER SQLSetStmtAttrW 
        SQLHSTMT            0x0C6632A0
        SQLINTEGER                1228 <unknown>
        SQLPOINTER          [Unknown attribute 1228]
        SQLINTEGER                  -5 

WorldShipTD     d94-690 EXIT  SQLSetStmtAttrW  with return code -1 (SQL_ERROR)
        SQLHSTMT            0x0C6632A0
        SQLINTEGER                1228 <unknown>
        SQLPOINTER          [Unknown attribute 1228]
        SQLINTEGER                  -5 

        DIAG [HY092] [Microsoft][ODBC Microsoft Access Driver]Invalid attribute/option identifier  (86) 

WorldShipTD     d94-690 ENTER SQLGetDiagFieldW 
        SQLSMALLINT                  3 
        SQLHANDLE           0x0C6632A0
        SQLSMALLINT                  1 
        SQLSMALLINT                  4 
        SQLPOINTER         0x00520708
        SQLSMALLINT                 12 
        SQLSMALLINT *       0x0028E2A8

WorldShipTD     d94-690 EXIT  SQLGetDiagFieldW  with return code 0 (SQL_SUCCESS)
        SQLSMALLINT                  3 
        SQLHANDLE           0x0C6632A0
        SQLSMALLINT                  1 
        SQLSMALLINT                  4 
        SQLPOINTER         0x00520708
        SQLSMALLINT                 12 
        SQLSMALLINT *       0x0028E2A8 (10)

WorldShipTD     d94-690 ENTER SQLSetStmtAttrW 
        SQLHSTMT            0x0C6632A0
        SQLINTEGER                1227 <unknown>
        SQLPOINTER          [Unknown attribute 1227]
        SQLINTEGER                  -5 

WorldShipTD     d94-690 EXIT  SQLSetStmtAttrW  with return code -1 (SQL_ERROR)
        SQLHSTMT            0x0C6632A0
        SQLINTEGER                1227 <unknown>
        SQLPOINTER          [Unknown attribute 1227]
        SQLINTEGER                  -5 

        DIAG [HY092] [Microsoft][ODBC Microsoft Access Driver]Invalid attribute/option identifier  (86) 

WorldShipTD     d94-690 ENTER SQLGetDiagFieldW 
        SQLSMALLINT                  3 
        SQLHANDLE           0x0C6632A0
        SQLSMALLINT                  1 
        SQLSMALLINT                  4 
        SQLPOINTER         0x00520708
        SQLSMALLINT                 12 
        SQLSMALLINT *       0x0028E2A8

WorldShipTD     d94-690 EXIT  SQLGetDiagFieldW  with return code 0 (SQL_SUCCESS)
        SQLSMALLINT                  3 
        SQLHANDLE           0x0C6632A0
        SQLSMALLINT                  1 
        SQLSMALLINT                  4 
        SQLPOINTER         0x00520708
        SQLSMALLINT                 12 
        SQLSMALLINT *       0x0028E2A8 (10)

答案1

由于手头的信息有限,我猜测您已经定义了一个用户 DSN,而它应该是系统 DSN。

如果不是这样,我们至少需要看到发生故障时出现的确切错误消息。客户端 ODBC 跟踪可能比 SQL Server 日志显示更多信息。

祝你好运!

相关内容