SQLColumns 関数

適合 性
導入されたバージョン:ODBC 1.0 標準準拠:オープングループ

Summary
SQLColumnは 指定されたテーブル内の列名のリストを返します。 ドライバーは指定された StatementHandleの結果セットとしてこの情報を返します。

構文

  
SQLRETURN SQLColumns(  
     SQLHSTMT       StatementHandle,  
     SQLCHAR *      CatalogName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      SchemaName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      TableName,  
     SQLSMALLINT    NameLength3,  
     SQLCHAR *      ColumnName,  
     SQLSMALLINT    NameLength4);  

引数

StatementHandle
[入力]ステートメント ハンドル。

CatalogName
[入力]カタログ名。 ドライバが一部のテーブルにはカタログをサポートしているが、他のテーブルには対応しない場合(例えば異なるDBMSからデータを取得する場合など)、空文字列(「」)はカタログを持たないテーブルを示します。 CatalogNameは 文字列検索パターンを含めません。

Note

SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 CatalogName は識別子として扱われ、その大文字は重要ではありません。 もしSQL_FALSEであれば、 カタログ名 は通常の引数となります。文字通りに扱われており、そのケースは重要です。 詳細については、「カタログ関数の引数」を参照してください。

NameLength1
[入力]*カタログ名の文字数。

スキーマ名
[入力]スキーマ名の文字列検索パターン。 ドライバが一部のテーブルにはスキーマをサポートしているが、他のテーブルには対応しない場合、例えば異なるDBMSからデータを取得する場合、空文字列(「」)はスキーマを持たないテーブルを示します。

Note

SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 SchemaName は識別子として扱われ、その大文字は重要ではありません。 SQL_FALSEの場合、 SchemaName はパターンの値の引数となります。文字通りに扱われており、そのケースは重要です。

NameLength2
[入力]*SchemaNameの文字数。

テーブル名
[入力]テーブル名の文字列検索パターン。

Note

SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 TableName は識別子として扱われ、その大文字は重要ではありません。 SQL_FALSEの場合、 TableName はパターン値の引数となります。文字通りに扱われており、そのケースは重要です。

NameLength3
[入力]*TableNameの文字数。

ColumnName
[入力]列名の文字列検索パターン。

Note

SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定されている場合、 ColumnName は識別子として扱われ、その大文字は重要ではありません。 SQL_FALSEの場合、 ColumnName はパターン値の引数です。文字通りに扱われており、そのケースは重要です。

名前の長さ4
[入力]*ColumnNameの文字数。

返品

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_STILL_EXECUTING、SQL_ERROR、またはSQL_INVALID_HANDLE。

Diagnostics

SQLColumns が SQL_ERROR または SQL_SUCCESS_WITH_INFO を返す場合、SQLGetDiagRec を呼び出して HandleType を SQL_HANDLE_STMT と HandleStatementHandle で呼び出すことで、関連する SQLSTATE 値を取得できます。 以下の表は、 通常SQLColumnsが返すSQLSTATE 値を示し、それぞれをこの関数の文脈で説明しています。「(DM)」という表記は、ドライバーマネージャーが返すSQLstateの記述の前に記載されます。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。

SQLSTATE エラー Description
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
08S01 通信リンクエラー ドライバーとドライバーが接続されたデータ ソース間の通信リンクは、関数の処理が完了する前に失敗しました。
24000 カーソル状態が無効 StatementHandle上のカーソルが開かれ、SQLFetchまたはSQLFetchScrollが呼び出されていました。 このエラーは、 SQLFetch または SQLFetchScroll がSQL_NO_DATAを返していない場合にドライバー マネージャーによって返され、 SQLFetch または SQLFetchScroll がSQL_NO_DATAを返した場合にドライバーによって返されます。

StatementHandleにはカーソルが開いていましたが、SQLFetchSQLFetchScrollは呼び出されていませんでした。
40001 シリアル化エラー リソースが別のトランザクションとデッドロックしたため、トランザクションがロールバックされました。
40003 ステートメントの入力候補が不明です この関数の実行中に関連付けられた接続が失敗し、トランザクションの状態を特定できません。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージには、エラーとその原因が記述されています。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。
HY008 操作が取り消されました StatementHandle に対して非同期処理が有効になりました。 関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandleStatementHandle で呼び出されました。 その後、 StatementHandle で関数が再度呼び出されました。

関数が呼び出され、実行が完了する前に、 SQLCancel または SQLCancelHandle がマルチスレッド アプリケーション内の別のスレッドから StatementHandle で呼び出されました。
HY009 null ポインターの使用が無効です SQL_ATTR_METADATA_ID文属性はSQL_TRUEに設定され、 CatalogName の引数はnullポインタであり、SQL_CATALOG_NAME InfoType はカタログ名がサポートされていることを返します。

(DM) SQL_ATTR_METADATA_ID文属性がSQL_TRUEに設定され、 SchemaNameTableName、または ColumnName の引数はnullポインタでした。
HY010 関数シーケンス エラー (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は SQLColumn 関数が呼び出された時点でもまだ実行中でした。

(DM) SQLExecuteSQLExecDirect、または SQLMoreResultsStatementHandle が呼び出され、SQL_PARAM_DATA_AVAILABLEが返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。

(DM) 非同期実行関数 (この関数ではない) が StatementHandle に対して呼び出されこの関数が呼び出されたときにはまだ実行されていました。

(DM) SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPosStatementHandle に対して呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。
HY013 メモリ管理エラー メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY090 文字列またはバッファーの長さが無効です (DM) 名前の長さの引数のうちの一つの値は0未満で、SQL_NTSと等しくなかった。
名前の長さの引数のうち1つの値が、対応するカタログや名前の最大長さ値を超えていました。 各カタログや名前の最大長さは、InfoTypeの値でSQLGetInfoを呼び出すことで取得できます。 (「コメント」を参照してください。)
HY117 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。
HYC00 省略可能な機能が実装されていません カタログ名が指定されており、ドライバーやデータソースはカタログをサポートしていません。

スキーマ名が指定されており、ドライバやデータソースはスキーマをサポートしていません。

スキーマ名、テーブル名、または列名に対して文字列検索パターンが指定されており、データソースはこれらの引数の一つ以上の検索パターンをサポートしていません。

SQL_ATTR_CONCURRENCY属性とSQL_ATTR_CURSOR_TYPE ステートメント属性の現在の設定の組み合わせは、ドライバーまたはデータ ソースではサポートされていませんでした。

SQL_ATTR_USE_BOOKMARKS ステートメント属性はSQL_UB_VARIABLEに設定され、SQL_ATTR_CURSOR_TYPE ステートメント属性は、ドライバーがブックマークをサポートしていないカーソルの種類に設定されました。
HYT00 タイムアウトの期限が切れました データ ソースが結果セットを返す前に、クエリのタイムアウト期間が期限切れになりました。 タイムアウト期間は、SQL_ATTR_QUERY_TIMEOUT SQLSetStmtAttr によって設定されます。
HYT01 接続がタイムアウトしました データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) StatementHandle に関連付けられているドライバーは、関数をサポートしていません。
IM017 非同期通知モードでポーリングが無効になっている 通知モデルが使用されるたびに、ポーリングは無効になります。
IM018 SQLCompleteAsync は、このハンドルに対する前の非同期操作を完了するために呼び出されていません。 ハンドルに対する前の関数呼び出しがSQL_STILL_EXECUTINGを返し、通知モードが有効になっている場合は、後処理を実行して操作を完了するために、 SQLCompleteAsync をハンドルで呼び出す必要があります。

Comments

この関数は通常、文の実行前に使用され、データソースのカタログからテーブルまたはテーブルの列に関する情報を取得するために使われます。 SQLColumn は、 SQLTablesによって返されるあらゆる種類のアイテムのデータを取得するために使用できます。 ベーステーブルに加え、ビュー、シノニム、システムテーブルなども含まれる場合がありますが、これらに限定されません。 対照的に、 SQLColAttributeSQLDescribeCol の関数は結果セット内の列を記述し、 SQLNumResultCols は結果セットの列数を返します。 詳細については、「データ カタログの参照」を参照してください。

Note

ODBC カタログ関数の一般的な使用方法、引数、および返されるデータの詳細については、「 カタログ関数」を参照してください。

SQLColumns は、TABLE_CAT、TABLE_SCHEM、TABLE_NAME、ORDINAL_POSITION順に並べた標準結果セットとして結果を返します。

Note

アプリケーションがODBC 2で動作する場合。x ドライバーの場合、結果セットにORDINAL_POSITION列は返されません。 その結果、ODBC 2を扱う際にはxドライバーの場合SQLColumns が返す列リストの列の順序は、アプリケーションがそのテーブルのすべての列に対してSELECT文を実行したときに返される列の順序とは必ずしも同じではありません。

Note

SQLColumn がすべての列を返すとは限りません。 例えば、ドライバーはOracle ROWIDのような擬似カラムの情報を返さない場合があります。 アプリケーションは、 SQLColumnによって返されるかどうかに関わらず、任意の有効な列を使用できます。

SQLStatisticsで返せる一部のカラムは、SQLColumnでは返されません。 例えば、 SQLColumns はSALARY + BENEFITSやDEPT = 0012のような式やフィルター上で作成されたインデックスの列を返しません。

VARCHARの列の長さは表には示されていません。実際の長さはデータソースによって異なります。 TABLE_CAT、TABLE_SCHEM、TABLE_NAME、COLUMN_NAME列の実際の長さを決定するために、アプリケーションはSQL_MAX_CATALOG_NAME_LEN、SQL_MAX_SCHEMA_NAME_LEN、SQL_MAX_TABLE_NAME_LEN、SQL_MAX_COLUMN_NAME_LENのオプションで SQLGetInfo を呼び出すことができます。

以下の列はODBC 3に改名されています。x。 カラム名の変更は後方互換性には影響しません。なぜならアプリケーションはカラム番号でバインドするからです。

ODBC 2.0 列 ODBC 3。x
TABLE_QUALIFIER TABLE_CAT
テーブルの所有者 TABLE_SCHEM
PRECISION COLUMN_SIZE
長さ BUFFER_LENGTH
規模 小数桁
基数 NUM_PREC_RADIX

以下の列がODBC 3の SQLColumns から返される結果セットに追加されました。x:

CHAR_OCTET_LENGTH
COLUMN_DEF

IS_NULLABLE
ORDINAL_POSITION

SQL データ型
SQL_DATETIME_SUB

次の表に、結果セットの列を示します。 18列(IS_NULLABLE)以降の追加列はドライバーによって定義可能です。 アプリケーションは、明示的な序数位置を指定するのではなく、結果セットの末尾からカウントダウンすることで、ドライバー固有の列にアクセスできるようにする必要があります。 詳細については、「 カタログ関数によって返されるデータ」を参照してください。

列名 Column

数値
データの種類 Comments
TABLE_CAT(ODBC 1.0) 1 Varchar カタログ名;データソースに適用できない場合はNULLです。 ドライバが一部のテーブルにはカタログをサポートしているが、他のテーブルではサポートしない場合(例えば異なるDBMSからデータを取得する場合など)、カタログを持たないテーブルに対して空の文字列("")を返します。
TABLE_SCHEM(ODBC 1.0) 2 Varchar スキーマ名;データソースに適用できない場合はNULLです。 ドライバが一部のテーブルにはスキーマをサポートしているが、他のテーブルではサポートしない場合、例えば異なるDBMSからデータを取得する場合、スキーマを持たないテーブルに対して空の文字列("")を返します。
TABLE_NAME(ODBC 1.0) 3 ヴァルチャーはNULLではありません テーブル名。
COLUMN_NAME(ODBC 1.0) 4 ヴァルチャーはNULLではありません 列名。 ドライバーは名前のない列に対して空文字列を返します。
DATA_TYPE(ODBC 1.0) 5 Smallint は NULL ではありません SQL データ型。 ODBC SQL データ型またはドライバー固有の SQL データ型を指定できます。 日付時間および区間データ型の場合、この列は簡潔なデータ型(SQL_DATETIMEやSQL_INTERVALのような非簡潔なデータ型の代わりに、SQL_TYPE_DATEやSQL_INTERVAL_YEAR_TO_MONTHのような簡潔なデータ型を返します)。 有効な ODBC SQL データ型の一覧については、「付録 D: データ型」の「SQL データ型」を参照してください。 ドライバー固有の SQL データ型の詳細については、ドライバーのドキュメントを参照してください。

ODBC 3のデータ型は返されました。x とODBC 2。x の用途は異なる場合があります。 詳細については、「下位互換性と標準のコンプライアンス」を参照してください
TYPE_NAME(ODBC 1.0) 6 ヴァルチャーはNULLではありません データソース依存のデータ型名;例えば、「CHAR」、「VARCHAR」、「MONEY」、「LONG VARBINAR」、「ビットデータ用のCHAR( )
COLUMN_SIZE(ODBC 1.0) 7 Integer DATA_TYPEがSQL_CHARまたはSQL_VARCHARの場合、この列は列の文字数の最大長を含みます。 datetimeデータ型の場合、これは値を文字に変換する際に表示するために必要な合計文字数です。 数値データ型の場合、これはNUM_PREC_RADIX列に応じた桁数の合計か、列に許可されるビット数の合計です。 区間データ型の場合、これは区間リテラルの文字表現の文字数(区間先導精度で定義される。付録D:データ型の 区間データタイプ 長を参照)です。 詳細については、「付録 D: データ型」の「 Column Size、Decimal Digits、Transfer Octet Length、および Display Size を参照してください。
BUFFER_LENGTH(ODBC 1.0) 8 Integer SQLGetData、SQLFetch、またはSQLFetchScroll操作で転送されるデータの長さ(SQL_C_DEFAULT)。 数値データの場合、このサイズはデータソースに保存されるデータのサイズと異なる場合があります。 この値は文字データの列COLUMN_SIZE異なる場合があります。 長さの詳細については、付録Dのデータ型の「 列サイズ、十進数桁、転送オクテット長、表示サイズ 」をご覧ください。
DECIMAL_DIGITS(ODBC 1.0) 9 Smallint 小数点の右側にある有効数字の合計数。 SQL_TYPE_TIMEおよびSQL_TYPE_TIMESTAMPでは、この列は分数秒成分の桁数を含みます。 その他のデータ型については、データソースの列の小数点数です。 時間成分を含む区間データ型の場合、この列は小数点の右にある数字数(分数秒)を含みます。 時間成分を含まない区間データ型の場合、この列は0です。 小数点数の詳細については、付録Dのデータ型にある「 列サイズ、小数点数、転送オクテット長、表示サイズ 」をご覧ください。 NULLは、DECIMAL_DIGITSが適用されないデータ型に対して返されます。
NUM_PREC_RADIX(ODBC 1.0) 10 Smallint 数値データ型の場合は、10 または 2 です。 10の場合、COLUMN_SIZEとDECIMAL_DIGITSの値は列に許可される小数点数を示します。 たとえば、DECIMAL(12,5) 列は、NUM_PREC_RADIX 10、COLUMN_SIZE 12、DECIMAL_DIGITS 5 を返します。FLOAT 列は、NUM_PREC_RADIX 10、COLUMN_SIZE 15、DECIMAL_DIGITS NULL を返します。

2の場合、COLUMN_SIZEとDECIMAL_DIGITSの値は列に許可されるビット数を示します。 例えば、FLOAT列はRADIXが2、COLUMN_SIZEが53、DECIMAL_DIGITSがNULLを返すことがあります。

NUM_PREC_RADIXが適用されないデータ型には NULL が返されます。
NULLABLE(ODBC 1.0) 11 Smallint は NULL ではありません SQL_NO_NULLS列にNULL値を含めない場合。

SQL_NULLABLE列がNULL値を受け入れているかどうか。

列が NULL 値を受け入れるかどうかがわからない場合にSQL_NULLABLE_UNKNOWNします。

この列の値と、IS_NULLABLE列の値が異なります。 NULLABLE列は、その列がNULLを受け入れられることを確実に示しますが、NULLを受け付けない列を確実に示すことはできません。 IS_NULLABLE列は、ある列がNULLを受け入れられないことを確実に示しますが、NULLを受け付けることは確実に示せません。
備考(ODBC 1.0) 12 Varchar コラムの説明。
COLUMN_DEF(ODBC 3.0) 13 Varchar 列の既定値です。 この列の値は、引用符で囲まれている場合、文字列として解釈されるべきです。

NULL が既定値として指定された場合、この列は引用符で囲まれていない単語 NULL です。 デフォルト値を切り詰めずに表現できない場合、この列には単引用符を囲まないTRUNCATEDが入ります。 既定値が指定されていない場合、この列は NULL です。

COLUMN_DEFの値は、TRUNCATED 値が含まれている場合を除き、新しい列定義の生成に使用できます。
SQL_DATA_TYPE(ODBC 3.0) 14 Smallint は NULL ではありません IRDのSQL_DESC_TYPEレコード欄に表示されるSQLデータ型です。 ODBC SQL データ型またはドライバー固有の SQL データ型を指定できます。 この列は、datetime および interval データ型を除き、DATA_TYPE列と同じです。 この列は、datetimeやintervalデータ型の簡潔なデータ型(SQL_TYPE_DATEやSQL_INTERVAL_YEAR_TO_MONTHなど)の代わりに、非簡潔なデータ型(SQL_DATETIMEやSQL_INTERVAL)を返します。 この列がSQL_DATETIMEまたはSQL_INTERVALを返す場合、SQL_DATETIME_SUB列から特定のデータ型を決定できます。 有効な ODBC SQL データ型の一覧については、「付録 D: データ型」の「SQL データ型」を参照してください。 ドライバー固有の SQL データ型の詳細については、ドライバーのドキュメントを参照してください。

ODBC 3のデータ型は返されました。x とODBC 2。x の用途は異なる場合があります。 詳細については、「下位互換性と標準のコンプライアンス」を参照してください
SQL_DATETIME_SUB(ODBC 3.0) 15 Smallint datetime および interval データ型のサブタイプ コード。 その他のデータ型の場合、この列は NULL を返します。 datetimeおよびintervalサブコードの詳細については、 SQLSetDescFieldの「SQL_DESC_DATETIME_INTERVAL_CODE」を参照してください。
CHAR_OCTET_LENGTH(ODBC 3.0) 16 Integer 文字またはバイナリ データ型の列の最大長 (バイト単位)。 その他のすべてのデータ型の場合、この列は NULL を返します。
ORDINAL_POSITION(ODBC 3.0) 17 整数が NULL ではない 表内の列の順序数位置。 表の最初の列は1番です。
IS_NULLABLE(ODBC 3.0) 18 Varchar 列に NULL が含まれていない場合は "NO" です。

「YES」は、列にNULLを含めることができる場合です。

NULL 値の許容が不明な場合、この列は長さ 0 の文字列になります。

ISO の規則に従って、NULL 値の許容が判断されます。 ISO SQL 準拠の DBMS は空の文字列を返すことができません。

この列の値がNULLABLE列で返される値とは異なります。 (NULLABLE 列の説明を参照してください)。

コード例

以下の例では、アプリケーションが SQLColumnsから戻された結果セットのバッファを宣言します。 SQLColumns を呼び出して、EMPLOYEE テーブルの各列を記述する結果セットを返します。 その後、 SQLBindCol を呼び出して結果セットの列をバッファにバインドします。 最後に、アプリケーションは SQLFetch で各行のデータを取得し、処理します。

// SQLColumns_Function.cpp  
// compile with: ODBC32.lib  
#include <windows.h>  
#include <sqlext.h>  
#define STR_LEN 128 + 1  
#define REM_LEN 254 + 1  
  
// Declare buffers for result set data  
SQLCHAR szSchema[STR_LEN];  
SQLCHAR szCatalog[STR_LEN];  
SQLCHAR szColumnName[STR_LEN];  
SQLCHAR szTableName[STR_LEN];  
SQLCHAR szTypeName[STR_LEN];  
SQLCHAR szRemarks[REM_LEN];  
SQLCHAR szColumnDefault[STR_LEN];  
SQLCHAR szIsNullable[STR_LEN];  
  
SQLINTEGER ColumnSize;  
SQLINTEGER BufferLength;  
SQLINTEGER CharOctetLength;  
SQLINTEGER OrdinalPosition;  
  
SQLSMALLINT DataType;  
SQLSMALLINT DecimalDigits;  
SQLSMALLINT NumPrecRadix;  
SQLSMALLINT Nullable;  
SQLSMALLINT SQLDataType;  
SQLSMALLINT DatetimeSubtypeCode;  
  
SQLHSTMT hstmt = NULL;  
  
// Declare buffers for bytes available to return  
SQLINTEGER cbCatalog;  
SQLINTEGER cbSchema;  
SQLINTEGER cbTableName;  
SQLINTEGER cbColumnName;  
SQLINTEGER cbDataType;  
SQLINTEGER cbTypeName;  
SQLINTEGER cbColumnSize;  
SQLLEN cbBufferLength;  
SQLINTEGER cbDecimalDigits;  
SQLINTEGER cbNumPrecRadix;  
SQLINTEGER cbNullable;  
SQLINTEGER cbRemarks;  
SQLINTEGER cbColumnDefault;  
SQLINTEGER cbSQLDataType;  
SQLINTEGER cbDatetimeSubtypeCode;  
SQLINTEGER cbCharOctetLength;  
SQLINTEGER cbOrdinalPosition;  
SQLINTEGER cbIsNullable;  
  
int main() {  
   SQLHENV henv;  
   SQLHDBC hdbc;  
   SQLHSTMT hstmt = 0;  
   SQLRETURN retcode;  
  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);   
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
   retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
   retcode = SQLConnect(hdbc, (SQLCHAR*) "Northwind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
   retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);  
   retcode = SQLColumns(hstmt, NULL, 0, NULL, 0, (SQLCHAR*)"CUSTOMERS", SQL_NTS, NULL, 0);  
  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
      // Bind columns in result set to buffers  
      SQLBindCol(hstmt, 1, SQL_C_CHAR, szCatalog, STR_LEN,&cbCatalog);  
      SQLBindCol(hstmt, 2, SQL_C_CHAR, szSchema, STR_LEN, &cbSchema);  
      SQLBindCol(hstmt, 3, SQL_C_CHAR, szTableName, STR_LEN,&cbTableName);  
      SQLBindCol(hstmt, 4, SQL_C_CHAR, szColumnName, STR_LEN, &cbColumnName);  
      SQLBindCol(hstmt, 5, SQL_C_SSHORT, &DataType, 0, &cbDataType);  
      SQLBindCol(hstmt, 6, SQL_C_CHAR, szTypeName, STR_LEN, &cbTypeName);  
      SQLBindCol(hstmt, 7, SQL_C_SLONG, &ColumnSize, 0, &cbColumnSize);  
      SQLBindCol(hstmt, 8, SQL_C_SLONG, &BufferLength, 0, &cbBufferLength);  
      SQLBindCol(hstmt, 9, SQL_C_SSHORT, &DecimalDigits, 0, &cbDecimalDigits);  
      SQLBindCol(hstmt, 10, SQL_C_SSHORT, &NumPrecRadix, 0, &cbNumPrecRadix);  
      SQLBindCol(hstmt, 11, SQL_C_SSHORT, &Nullable, 0, &cbNullable);  
      SQLBindCol(hstmt, 12, SQL_C_CHAR, szRemarks, REM_LEN, &cbRemarks);  
      SQLBindCol(hstmt, 13, SQL_C_CHAR, szColumnDefault, STR_LEN, &cbColumnDefault);  
      SQLBindCol(hstmt, 14, SQL_C_SSHORT, &SQLDataType, 0, &cbSQLDataType);  
      SQLBindCol(hstmt, 15, SQL_C_SSHORT, &DatetimeSubtypeCode, 0, &cbDatetimeSubtypeCode);  
      SQLBindCol(hstmt, 16, SQL_C_SLONG, &CharOctetLength, 0, &cbCharOctetLength);  
      SQLBindCol(hstmt, 17, SQL_C_SLONG, &OrdinalPosition, 0, &cbOrdinalPosition);  
      SQLBindCol(hstmt, 18, SQL_C_CHAR, szIsNullable, STR_LEN, &cbIsNullable);  
  
      while (SQL_SUCCESS == retcode) {  
         retcode = SQLFetch(hstmt);  
         /*  
         if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO)  
            0;   // show_error();  
         if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)  
            0;   // Process fetched data  
         else  
            break;  
        */  
      }  
   }  
}  
~についての情報 参照先
結果セット内の列へのバッファーのバインド SQLBindCol 関数
ステートメント処理の取り消し SQLCancel 関数
コラムまたは複数のコラムの返還権限 SQLColumnPrivileges 関数
データブロックのフェッチまたは結果セットのスクロール SQLFetchScroll 関数
複数行のデータをフェッチする SQLFetch 関数
行を一意に識別するカラム、またはトランザクションによって自動的に更新されるカラムの返送 SQLSpecialColumns 関数
表の統計と指数の返還 SQLStatistics 関数
データソース内のテーブル一覧の返還 SQLTables 関数
テーブルまたはテーブルの返品権限 SQLTablePrivileges 関数