Unicode 驱动程序

驱动程序是 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。 驱动程序管理器会将 ANSI 驱动程序的 SQL_C_WCHAR 映射到 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 连接。