« 文字列型の憂鬱(2) | トップページ | 数値型の憂鬱 »

2008年5月17日 (土)

文字列型の憂鬱(3)

前回、データベースの文字コードとクライアントアプリケーションの文字コードが異なると文字コードの変換が発生し、文字列データの長さが拡張または縮小する可能性があるので、切り捨てが発生しないように必要なバッファ量を見積もるのが多少面倒であることを書いたが、そのような事を考える必要なしに文字列データを取得する方法がある。

SQLGetData関数を使う方法である。

SQLGetData関数は通常、長いデータと呼ばれるSQL_LONGVARCHARやSQL_LONGVARBINARYのSQLデータ型のデータを分けて取り出すために使われる(SQL_INTEGERやSQL_TYPE_TIMESTAMP等の固定長データもこの関数を使って取り出すことができるが、分けて取り出す事はできない)が、この関数を使い長いデータを取り出す時と同様に、SQLGetData関数がSQL_SUCCESSを返すまで複数回呼び出して取り出せば、取り出したデータを組み立てる必要はあるが、文字列データの拡張や縮小といった問題を考える必要なく取り出すことができる。

と、この関数を使ってデータを取り出す方が楽に思えるが、SQLGetData関数を使って取り出す列は通常は、SQLBindCol関数でバインドしてはならず、また、列番号の小さい列から大きい列に向かって、つまり、昇順に取り出さなければいけない等の制限があり、別の問題が発生するのである。頭痛い・・wobblyちなみに、どのような制限が課せられるかは、ドライバ次第で、この情報はSQLGetInfo関数(InfoType=SQL_GET_DATA_EXTENSIONS)で取得できる。

« 文字列型の憂鬱(2) | トップページ | 数値型の憂鬱 »

DB2」カテゴリの記事

Oracle」カテゴリの記事

データベース」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651764

この記事へのトラックバック一覧です: 文字列型の憂鬱(3):

« 文字列型の憂鬱(2) | トップページ | 数値型の憂鬱 »

自作ソフトウェア

無料ブログはココログ

メモ