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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据访问 API » SQL Anywhere ODBC API » 创建 ODBC 应用程序

 

使用 unixODBC 驱动程序管理器

unixODBC 在版本 2.2.13 之前发行的版本错误地实现了由 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.13 中,由于头文件的发布,该问题得到了更正。

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

  3. 您不得使用 2.2.13 发行版以前的 unixODBC 驱动程序管理器版本。相反,您可以直接链接到 SQL Anywhere ODBC 驱动程序。例如,确保 libodbc 共享对象链接到 SQL Anywhere 驱动程序。

    libodbc.so.1 -> libdbodbc11_r.so.1

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

有关详细信息,请参见在 Unix 上链接 ODBC 应用程序