Unicode ドライバー
ドライバーを Unicode ドライバーにするか ANSI ドライバーにするかは、データ ソースの性質に完全に依存します。 データ ソースが Unicode データをサポートしている場合、ドライバーは Unicode ドライバーにする必要があります。 データ ソースが ANSI データのみをサポートしている場合、ドライバーは ANSI ドライバーのままにする必要があります。
Unicode ドライバーは、ドライバー マネージャーによって Unicode ドライバーとして認識されるように SQLConnectW をエクスポートする必要があります。
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 ドライバーのマッピングは行いません。
Note
ドライバーの種類を決定するときに、ドライバー マネージャーは 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 接続を分離します。