Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 编程 » ODBC 支持 » ODBC 应用程序开发

 

unixODBC 驱动程序管理器

unixODBC 在版本 2.2.14 之前发行的版本错误地实现了由 Microsoft 所定义的 64 位 ODBC 规范中的某些方面。将 unixODBC 驱动程序管理器与 SQL Anywhere 64 位 ODBC 驱动程序一起使用时,这些差异会导致问题。

要避免这些问题,您应了解这些差异。差异之一是 SQLLEN 和 SQLULEN 的定义。在 Microsoft 64 位 ODBC 规范中,这些定义是 64 位类型的,并且是 SQL Anywhere 64 位 ODBC 驱动程序应使用的 64 位类型。而 unixODBC 的某些实现方式将这两种类型定义为 32 位,在连接到 SQL Anywhere 64 位 ODBC 驱动程序时,这会导致问题。

要避免在 64 位平台上出现问题,您必须做三件事。

  1. 您应包括 SQL Anywhere ODBC 头文件 unixodbc.h,而不是包括 unixODBC 标头(例如 sql.hsqlext.h)。这将保证您有正确的 SQLLEN 和 SQLULEN 定义。在 unixODBC 2.2.14 或更高版本中,通过头文件更正了该问题。

  2. 您必须确保已使用了所有参数的正确类型。正确头文件的使用以及 C/C++ 编译器强大的类型检查功能会在这方面有所帮助。还必须确保您已为所有由 SQL Anywhere 驱动程序通过指针间接设置的变量使用了正确的类型。

  3. 不要使用 2.2.14 发行版以前的 unixODBC 驱动程序管理器版本,而是直接链接到 SQL Anywhere ODBC 驱动程序。例如,确保 libodbc 共享对象链接到 SQL Anywhere 驱动程序。

    libodbc.so.1 -> libdbodbc16_r.so.1

    或者,也可以在平台上使用 SQL Anywhere 驱动程序管理器(如果该平台具有该程序)。

 另请参见