13.16 ADO及びADO.NETからODBCを経由してHiRDBサーバにアクセスする場合の留意事項
ADO及びADO.NETのインタフェースを利用したUAPが,HiRDB ODBC3.5ドライバ経由でHiRDBサーバに接続するときの留意事項について説明します。なお,HiRDB ODBC3.5ドライバ,及びHiRDBサーバのバージョンが共に08-04以降の場合は,この現象は発生しないため対策する必要はありません。
UAPからADO及びADO.NETのインタフェースを利用した場合,ユーザがSQL文に指定した認可識別子,及び表識別子を,ADOが自動的に引用符で囲むことがあります。HiRDBサーバでは引用符が付与されている識別子を半角英大文字と半角英小文字で区別するため,ADOが自動的に識別子を引用符で囲んだ場合,SQL文がエラーとなることがあります。
ADOが自動的に引用符を付与したSQL文がエラーになる例を次の図に示します。この例では,表識別子がSAMPLEで定義されているとします。
- [説明]
-
-
UAPから,select * from sampleを実行します。HiRDBサーバは,SQLをSELECT * FROM SAMPLEと受け取り,識別子を「SAMPLE」と認識します。
-
ADOは,識別子を引用符で囲めるかどうかを確認するためにHiRDB ODBC3.5ドライバに問い合わせます。
ADOが内部的にSQLGetInfoW()関数をコールして,SQL_IDENTIFIER_QUOTE_CHARの情報を取得します。HiRDBサーバは,引用符付きの識別子を使用できるため,HiRDB ODBC3.5ドライバは,ADOからの要求に対して引用符付きの識別子が利用できると応答します。この応答を受けて,ADOはSQL文を組立てる際に,自動的に識別子に引用符を付与します。HiRDBサーバは,識別子を「"sample"」と受け取ります。
-
HiRDBサーバは引用符付きの識別子は半角英大文字と半角英小文字を区別します。HiRDBサーバで定義されている識別子は「SAMPLE」であるため,2.で受け取った識別子「sample」を不一致と認識し,HiRDBサーバはUAPにエラーを返します。
-
ADOが自動的に引用符を付与したSQL文がエラーになる条件を次に示します。
SQL文に指定した識別子 |
HiRDBサーバに格納された識別子 |
|
---|---|---|
すべて半角英大文字 |
半角英小文字を含む |
|
すべて半角英大文字 |
○ |
× |
半角英小文字を含む |
× |
○ |
- (凡例)
-
○:エラーは発生しません。
×:エラーが発生します。
この場合,クライアント環境定義PDODBGINFOSUPPRESSにYESを指定することで,ADOが自動的に識別子に引用符を付与することを抑止できます。クライアント環境定義PDODBGINFOSUPPRESSについては,「PDODBGINFOSUPPRESS」を参照してください。