SQLDescribeCol および SQLColAttribute
SQLDescribeCol と SQLColAttribute は、結果セットのメタデータを取得するために使用されます。 これら 2 つの関数の違いは、SQLDescribeCol は常に同じ 5 つの情報 (列の名前、データ型、有効桁数、小数点以下桁数、および null 許容) を返し、SQLColAttribute はアプリケーションによって要求された単一の情報を返すということです。 ただし、SQLColAttribute は、列の大文字と小文字の区別、表示サイズ、更新可能性、検索可能性など、より豊富なメタデータを返すことができます。
多くのアプリケーション 、特にデータのみを表示するアプリケーションでは、SQLDescribeCol によって返されるメタデータのみが必要です。 これらのアプリケーションでは、情報が 1 回の呼び出しで返されるため、SQLColAttribute よりも SQLDescribeCol を使用する方が高速です。 他のアプリケーション 、特にデータを更新するアプリケーションでは、SQLColAttribute によって返される追加のメタデータが必要であるため、両方の関数を使用します。 さらに、SQLColAttribute ではドライバー固有のメタデータがサポートされています。詳細については、「ドライバー固有のデータ型、記述子の種類、情報の種類、診断の種類、属性」を参照してください。
アプリケーションは、ステートメントの準備または実行後、および結果セット上のカーソルが閉じられる前に、いつでも結果セットのメタデータを取得できます。 ステートメントの準備後と実行前に結果セットメタデータを必要とするアプリケーションはほとんどありません。 データ ソースによってはプリペアド ステートメントのメタデータを返すことができず、ドライバーでこの機能をエミュレートするプロセスは時間がかかることが多いため、可能である場合、アプリケーションはステートメントが実行されるまでメタデータの取得を待機する必要があります。 たとえば、ドライバーは、SELECT ステートメントの WHERE 句を WHERE 1 = 2 の句に置き換え、結果のステートメントを実行することで、0 行の結果セットを生成できます。
多くの場合、メタデータは、データ ソースから取得するコストがかかります。 このため、ドライバーは、サーバーから取得するすべてのメタデータをキャッシュし、結果セットの上のカーソルが開いている限り保持する必要があります。 また、アプリケーションは、絶対に必要なメタデータのみを要求する必要があります。