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 位平台上出现问题,您必须做三件事。
您应包括 SQL Anywhere ODBC 头文件 unixodbc.h,而不是包括 unixODBC 标头(例如 sql.h 和 sqlext.h)。这将保证您有正确的 SQLLEN 和 SQLULEN 定义。在 unixODBC 2.2.13 中,由于头文件的发布,该问题得到了更正。
您必须确保已使用了所有参数的正确类型。正确头文件的使用以及 C/C++ 编译器强大的类型检查功能会在这方面有所帮助。还必须确保您已为所有由 SQL Anywhere 驱动程序通过指针间接设置的变量使用了正确的类型。请参见64 位 ODBC 注意事项。
您不得使用 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 应用程序。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |