驱动程序是 Unicode 驱动程序还是 ANSI 驱动程序完全取决于数据源的性质。 如果数据源支持 Unicode 数据,驱动程序应为 Unicode 驱动程序。 如果数据源仅支持 ANSI 数据,驱动程序应保留 ANSI 驱动程序。
Unicode 驱动程序必须导出 SQLConnectW 才能被驱动程序管理器识别为 Unicode 驱动程序。
Unicode 驱动程序必须接受 Unicode 函数(后缀 为 W),并存储 Unicode 数据。 它还可以接受 ANSI 函数,但不需要它。 (驱动程序管理器不向驱动程序传递 带有 A 后缀的 ANSI 函数调用,而是将其转换为没有后缀的 ANSI 函数调用,然后将其传递给驱动程序。
Unicode 驱动程序必须能够在 Unicode 或 ANSI 中返回结果集,具体取决于应用程序的绑定。 如果应用程序绑定到SQL_C_CHAR,则 Unicode 驱动程序必须将SQL_WCHAR数据转换为SQL_CHAR。 驱动程序管理器会将 SQL_C_WCHAR 映射到 ANSI 驱动程序的 SQL_C_CHAR,但对 Unicode 驱动程序则不进行映射。
注释
确定驱动程序类型时,驱动程序管理器将调用 SQLSetConnectAttr 并在连接时设置SQL_ATTR_ANSI_APP属性。 如果应用程序使用的是 ANSI API,则SQL_ATTR_ANSI_APP将设置为SQL_AA_TRUE;如果使用 Unicode,则会将其设置为SQL_AA_FALSE值。 使用此属性,以便驱动程序可以根据应用程序类型表现出不同的行为。 属性不能由应用程序直接设置, SQLGetConnectAttr 不支持此属性。 如果驱动程序对 ANSI 和 Unicode 应用程序表现出相同的行为,它应返回此属性的SQL_ERROR。 如果驱动程序返回SQL_SUCCESS,则使用连接池时,驱动程序管理器将分隔 ANSI 和 Unicode 连接。