Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 1.0: Grup Terbuka
Summary
SQLColumns mengembalikan daftar nama kolom dalam tabel tertentu. Driver mengembalikan informasi ini sebagai set hasil pada StatementHandle yang ditentukan.
Syntax
SQLRETURN SQLColumns(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLCHAR * ColumnName,
SQLSMALLINT NameLength4);
Arguments
StatementHandle
[Input] Handel pernyataan.
CatalogName
[Input] Nama katalog. Jika driver mendukung katalog untuk beberapa tabel tetapi tidak untuk yang lain, misalnya saat driver mengambil data dari DBMS yang berbeda, string kosong ("") menunjukkan tabel yang tidak memiliki katalog.
CatalogName tidak dapat berisi pola pencarian string.
Note
Jika atribut pernyataan SQL_ATTR_METADATA_ID diatur ke SQL_TRUE, CatalogName diperlakukan sebagai pengidentifikasi dan kasusnya tidak signifikan. Jika SQL_FALSE, CatalogName adalah argumen biasa; itu diperlakukan secara harfiah, dan kasusnya signifikan. Untuk informasi selengkapnya, lihat Argumen di Fungsi Katalog.
NameLength1
[Masukan] Panjang dalam karakter *CatalogName.
[Masukan] Pola pencarian string untuk nama skema. Jika driver mendukung skema untuk beberapa tabel tetapi tidak untuk yang lain, seperti saat driver mengambil data dari DBMS yang berbeda, string kosong ("") menunjukkan tabel yang tidak memiliki skema.
Note
Jika atribut pernyataan SQL_ATTR_METADATA_ID diatur ke SQL_TRUE, SchemaName diperlakukan sebagai pengidentifikasi dan kasusnya tidak signifikan. Jika SQL_FALSE, SchemaName adalah argumen nilai pola; itu diperlakukan secara harfiah, dan kasusnya signifikan.
NameLength2
[Masukan] Panjang dalam karakter *SchemaName.
Nama Tabel
[Masukan] Pola pencarian string untuk nama tabel.
Note
Jika atribut pernyataan SQL_ATTR_METADATA_ID diatur ke SQL_TRUE, TableName diperlakukan sebagai pengidentifikasi dan kasusnya tidak signifikan. Jika SQL_FALSE, TableName adalah argumen nilai pola; itu diperlakukan secara harfiah, dan kasusnya signifikan.
NameLength3
[Masukan] Panjang dalam karakter *TableName.
ColumnName
[Masukan] Pola pencarian string untuk nama kolom.
Note
Jika atribut pernyataan SQL_ATTR_METADATA_ID diatur ke SQL_TRUE, ColumnName diperlakukan sebagai pengidentifikasi dan kasusnya tidak signifikan. Jika SQL_FALSE, ColumnName adalah argumen nilai pola; itu diperlakukan secara harfiah, dan kasusnya signifikan.
NamaPanjang4
[Masukan] Panjang dalam karakter *ColumnName.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR, atau SQL_INVALID_HANDLE.
Diagnostics
Ketika SQLColumns mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_STMT dan HandleStatementHandle. Tabel berikut mencantumkan nilai SQLSTATE yang biasanya dikembalikan oleh SQLColumns dan menjelaskan masing-masing dalam konteks fungsi ini; notasi "(DM)" mendahului deskripsi SQLSTATE yang dikembalikan oleh Driver Manager. Kode pengembalian yang terkait dengan setiap nilai SQLSTATE SQL_ERROR, kecuali disebutkan sebaliknya.
| SQLSTATE | Kesalahan | Deskripsi |
|---|---|---|
| 01000 | Peringatan umum | Pesan informasi khusus driver. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.) |
| 08S01 | Kegagalan tautan komunikasi | Tautan komunikasi antara driver dan sumber data tempat driver tersambung gagal sebelum fungsi selesai diproses. |
| 24000 | Status kursor tidak valid | Kursor terbuka pada StatementHandle, dan SQLFetch atau SQLFetchScroll telah dipanggil. Kesalahan ini dikembalikan oleh Driver Manager jika SQLFetch atau SQLFetchScroll belum mengembalikan SQL_NO_DATA, dan dikembalikan oleh driver jika SQLFetch atau SQLFetchScroll telah mengembalikan SQL_NO_DATA. Kursor terbuka di StatementHandle tetapi SQLFetch atau SQLFetchScroll belum dipanggil. |
| 40001 | Kegagalan serialisasi | Transaksi digulung balik karena kebuntuan sumber daya dengan transaksi lain. |
| 40003 | Penyelesaian pernyataan tidak diketahui | Koneksi terkait gagal selama eksekusi fungsi ini, dan status transaksi tidak dapat ditentukan. |
| HY000 | Kesalahan umum | Terjadi kesalahan yang tidak ada SQLSTATE tertentu dan tidak ada SQLSTATE khusus implementasi yang ditentukan. Pesan kesalahan yang dikembalikan oleh SQLGetDiagRec di buffer *MessageText menjelaskan kesalahan dan penyebabnya. |
| HY001 | Kesalahan alokasi memori | Driver tidak dapat mengalokasikan memori yang diperlukan untuk mendukung eksekusi atau penyelesaian fungsi. |
| HY008 | Operasi dibatalkan | Pemrosesan asinkron diaktifkan untuk StatementHandle. Fungsi ini dipanggil, dan sebelum selesai dieksekusi, SQLCancel atau SQLCancelHandle dipanggil pada StatementHandle. Kemudian fungsi dipanggil lagi pada StatementHandle. Fungsi ini dipanggil, dan sebelum selesai dieksekusi, SQLCancel atau SQLCancelHandle dipanggil pada StatementHandle dari utas yang berbeda dalam aplikasi multithread. |
| HY009 | Penggunaan pointer null tidak valid | Atribut pernyataan SQL_ATTR_METADATA_ID diatur ke SQL_TRUE, argumen CatalogName adalah penunjuk null, dan InfoType SQL_CATALOG_NAME mengembalikan bahwa nama katalog didukung. (DM) Atribut pernyataan SQL_ATTR_METADATA_ID diatur ke SQL_TRUE, dan argumen SchemaName, TableName, atau ColumnName adalah null pointer. |
| HY010 | Kesalahan urutan fungsi | (DM) Fungsi eksekusi asinkron dipanggil untuk handel koneksi yang terkait dengan StatementHandle. Fungsi asinkron ini masih berjalan saat fungsi SQLColumns dipanggil. (DM) SQLExecute, SQLExecDirect, atau SQLMoreResults dipanggil untuk StatementHandle dan dikembalikan SQL_PARAM_DATA_AVAILABLE. Fungsi ini dipanggil sebelum data diambil untuk semua parameter yang dialirkan. (DM) Fungsi eksekusi asinkron (bukan yang ini) dipanggil untuk StatementHandle dan masih dijalankan ketika fungsi ini dipanggil. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations, atau SQLSetPos dipanggil untuk StatementHandle dan dikembalikan SQL_NEED_DATA. Fungsi ini dipanggil sebelum data dikirim untuk semua parameter atau kolom data-at-execution. |
| HY013 | Kesalahan manajemen memori | Panggilan fungsi tidak dapat diproses karena objek memori yang mendasar tidak dapat diakses, mungkin karena kondisi memori yang rendah. |
| HY090 | String atau panjang buffer tidak valid | (DM) Nilai salah satu argumen panjang nama kurang dari 0 tetapi tidak sama dengan SQL_NTS. |
| Nilai salah satu argumen panjang nama melebihi nilai panjang maksimum untuk katalog atau nama yang sesuai. Panjang maksimum setiap katalog atau nama dapat diperoleh dengan memanggil SQLGetInfo menggunakan nilai InfoType . (Lihat "Komentar.") | ||
| HY117 | Koneksi ditangguhkan karena status transaksi yang tidak diketahui. Hanya fungsi putuskan sambungan dan baca-saja yang diizinkan. | (DM) Untuk informasi selengkapnya tentang status ditangguhkan, lihat Fungsi SQLEndTran. |
| HYC00 | Fitur opsional tidak diimplementasikan | Nama katalog ditentukan, dan driver atau sumber data tidak mendukung katalog. Nama skema ditentukan, dan driver atau sumber data tidak mendukung skema. Pola pencarian string ditentukan untuk nama skema, nama tabel, atau nama kolom, dan sumber data tidak mendukung pola pencarian untuk satu atau lebih argumen tersebut. Kombinasi pengaturan saat ini dari atribut pernyataan SQL_ATTR_CONCURRENCY dan SQL_ATTR_CURSOR_TYPE tidak didukung oleh driver atau sumber data. Atribut pernyataan SQL_ATTR_USE_BOOKMARKS diatur ke SQL_UB_VARIABLE, dan atribut pernyataan SQL_ATTR_CURSOR_TYPE diatur ke jenis kursor yang drivernya tidak mendukung marka buku. |
| HYT00 | Waktu tunggu habis | Periode batas waktu kueri kedaluwarsa sebelum sumber data mengembalikan tataan hasil. Periode batas waktu diatur melalui SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
| HYT01 | Waktu tunggu koneksi habis | Periode batas waktu koneksi kedaluwarsa sebelum sumber data merespons permintaan. Periode batas waktu koneksi diatur melalui SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Driver tidak mendukung fungsi ini | (DM) Driver yang terkait dengan StatementHandle tidak mendukung fungsi. |
| IM017 | Polling dinonaktifkan dalam mode pemberitahuan asinkron | Setiap kali model pemberitahuan digunakan, polling dinonaktifkan. |
| IM018 | SQLCompleteAsync belum dipanggil untuk menyelesaikan operasi asinkron sebelumnya pada handel ini. | Jika panggilan fungsi sebelumnya pada handel mengembalikan SQL_STILL_EXECUTING dan jika mode pemberitahuan diaktifkan, SQLCompleteAsync harus dipanggil pada handel untuk melakukan pasca-pemrosesan dan menyelesaikan operasi. |
Komentar
Fungsi ini biasanya digunakan sebelum eksekusi pernyataan untuk mengambil informasi tentang kolom untuk tabel atau tabel-tabel dari katalog sumber data. SQLColumns dapat digunakan untuk mengambil data untuk semua jenis item yang dikembalikan oleh SQLTables. Selain tabel dasar, ini dapat mencakup (namun tidak terbatas pada) tampilan, sinonim, tabel sistem, dan sebagainya. Sebaliknya, fungsi SQLColAttribute dan SQLDescribeCol mendeskripsikan kolom dalam satu set hasil dan fungsi SQLNumResultCols mengembalikan jumlah kolom dalam satu set hasil. Untuk informasi selengkapnya, lihat Penggunaan Data Katalog.
Note
Untuk informasi selengkapnya tentang penggunaan umum, argumen, dan data fungsi katalog ODBC yang dikembalikan, lihat Fungsi Katalog.
SQLColumns mengembalikan hasil sebagai set hasil standar, diurutkan berdasarkan TABLE_CAT, TABLE_SCHEM, TABLE_NAME, dan ORDINAL_POSITION.
Note
Ketika sebuah aplikasi bekerja dengan ODBC 2. x driver, tidak ada kolom ORDINAL_POSITION yang dikembalikan dalam set hasil. Akibatnya, saat bekerja dengan ODBC 2. x driver, urutan kolom dalam daftar kolom yang dikembalikan oleh SQLColumns tidak selalu sama dengan urutan kolom yang dikembalikan ketika aplikasi melakukan pernyataan SELECT pada semua kolom dalam tabel tersebut.
Note
SQLColumns mungkin tidak mengembalikan semua kolom. Misalnya, sebuah driver mungkin tidak mengembalikan informasi tentang pseudo-kolom, seperti Oracle ROWID. Aplikasi dapat menggunakan kolom valid apa pun, baik dikembalikan oleh SQLColumns.
Beberapa kolom yang dapat dikembalikan oleh SQLStatistics tidak dikembalikan oleh SQLColumns. Misalnya, SQLColumns tidak mengembalikan kolom dalam indeks yang dibuat di atas ekspresi atau filter, seperti SALARY + BENEFITS atau DEPT = 0012.
Panjang kolom VARCHAR tidak ditampilkan dalam tabel; Panjang sebenarnya tergantung pada sumber data. Untuk menentukan panjang sebenarnya dari kolom TABLE_CAT, TABLE_SCHEM, TABLE_NAME, dan COLUMN_NAME, sebuah aplikasi dapat memanggil SQLGetInfo dengan opsi SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN, dan SQL_MAX_COLUMN_NAME_LEN.
Kolom berikut telah diganti namanya menjadi ODBC 3. x. Perubahan nama kolom tidak memengaruhi kompatibilitas mundur karena aplikasi mengikat dengan nomor kolom.
| Kolom ODBC 2.0 | ODBC 3. x kolom |
|---|---|
| KUALIFIKATOR_TABEL | TABLE_CAT |
| PEMILIK_TABEL | TABLE_SCHEM |
| PRESISI | UKURAN_KOLOM |
| PANJANG | BUFFER_LENGTH |
| SKALA | ANGKA_DESIMAL |
| RADIX | NUM_PREC_RADIX |
Kolom-kolom berikut telah ditambahkan ke set hasil yang dikembalikan oleh SQLColumns untuk ODBC 3. x:
CHAR_OCTET_LENGTH
COLUMN_DEF
IS_NULLABLE
ORDINAL_POSITION
SQL_DATA_TYPE
SQL_DATETIME_SUB
Tabel berikut mencantumkan kolom dalam tataan hasil. Kolom tambahan di luar kolom 18 (IS_NULLABLE) dapat didefinisikan oleh driver. Aplikasi harus mendapatkan akses ke kolom khusus driver dengan menghitung mundur dari akhir tataan hasil alih-alih menentukan posisi ordinal eksplisit. Untuk informasi selengkapnya, lihat Data yang Dikembalikan oleh Fungsi Katalog.
| Nama kolom | Column nomor/angka |
Jenis data | Komentar |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Nama katalog; NULL jika tidak berlaku untuk sumber data. Jika driver mendukung katalog untuk beberapa tabel tetapi tidak untuk yang lain, seperti saat driver mengambil data dari DBMS yang berbeda, driver akan mengembalikan string kosong ("") untuk tabel yang tidak memiliki katalog. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Nama skema; NULL jika tidak berlaku untuk sumber data. Jika driver mendukung skema untuk beberapa tabel tetapi tidak untuk yang lain, seperti saat driver mengambil data dari DBMS yang berbeda, driver akan mengembalikan string kosong ("") untuk tabel yang tidak memiliki skema. |
| TABLE_NAME (ODBC 1.0) | 3 | Varchar bukan NULL | Nama tabel |
| COLUMN_NAME (ODBC 1.0) | 4 | Varchar bukan NULL | Nama kolom. Driver mengembalikan string kosong untuk kolom yang tidak memiliki nama. |
| DATA_TYPE (ODBC 1.0) | 5 | Smallint bukan NULL | Jenis data SQL. Ini bisa berupa jenis data ODBC SQL atau jenis data SQL khusus driver. Untuk tipe data datetime dan interval, kolom ini mengembalikan tipe data ringkas (seperti SQL_TYPE_DATE atau SQL_INTERVAL_YEAR_TO_MONTH, bukan tipe data nonringkas seperti SQL_DATETIME atau SQL_INTERVAL). Untuk daftar tipe data ODBC SQL yang valid, lihat Jenis Data SQL di Lampiran D: Jenis Data. Untuk informasi tentang jenis data SQL khusus driver, lihat dokumentasi driver. Tipe data yang dikembalikan untuk ODBC 3. x dan ODBC 2. aplikasi x mungkin berbeda. Untuk informasi selengkapnya, lihat Kompatibilitas Mundur dan Kepatuhan Standar. |
| TYPE_NAME (ODBC 1.0) | 6 | Varchar bukan NULL | Nama tipe data yang bergantung pada sumber data; misalnya, "CHAR", "VARCHAR", "MONEY", "LONG VARBINAR", atau "CHAR ( ) UNTUK DATA BIT". |
| COLUMN_SIZE (ODBC 1.0) | 7 | Integer | Jika DATA_TYPE SQL_CHAR atau SQL_VARCHAR, kolom ini berisi panjang maksimum dalam karakter kolom. Untuk tipe data datetime, ini adalah total jumlah karakter yang diperlukan untuk menampilkan nilai saat dikonversi menjadi karakter. Untuk tipe data numerik, ini adalah jumlah total digit atau total bit yang diizinkan dalam kolom, sesuai dengan kolom NUM_PREC_RADIX. Untuk tipe data interval, ini adalah jumlah karakter dalam representasi karakter dari literal interval (sebagaimana didefinisikan oleh presisi awal interval, lihat Panjang Tipe Data Interval di Lampiran D: Tipe Data). Untuk informasi selengkapnya, lihat Ukuran Kolom, Digit Desimal, Panjang Oktet Transfer, dan Ukuran Tampilan dalam Lampiran D: Jenis Data. |
| BUFFER_LENGTH (ODBC 1.0) | 8 | Integer | Panjang dalam byte data yang ditransfer pada operasi SQLGetData, SQLFetch, atau SQLFetchScroll jika SQL_C_DEFAULT ditentukan. Untuk data numerik, ukuran ini mungkin berbeda dari ukuran data yang disimpan di sumber data. Nilai ini mungkin berbeda dari COLUMN_SIZE kolom untuk data karakter. Untuk informasi lebih lanjut tentang panjang, lihat Ukuran Kolom, Digit Desimal, Panjang Octet Transfer, dan Ukuran Tampilan di Lampiran D: Tipe Data. |
| DECIMAL_DIGITS (ODBC 1.0) | 9 | Smallint | Jumlah total digit signifikan di sebelah kanan titik desimal. Untuk SQL_TYPE_TIME dan SQL_TYPE_TIMESTAMP, kolom ini berisi jumlah digit dalam komponen detik pecahan. Untuk tipe data lainnya, ini adalah digit desimal dari kolom pada sumber data. Untuk tipe data interval yang mengandung komponen waktu, kolom ini berisi jumlah digit di sebelah kanan titik desimal (detik pecahan). Untuk tipe data interval yang tidak mengandung komponen waktu, kolom ini adalah 0. Untuk informasi lebih lanjut tentang digit desimal, lihat Ukuran Kolom, Digit Desimal, Panjang Octet Transfer, dan Ukuran Tampilan di Lampiran D: Tipe Data. NULL dikembalikan untuk tipe data di mana DECIMAL_DIGITS tidak berlaku. |
| NUM_PREC_RADIX (ODBC 1.0) | 10 | Smallint | Untuk jenis data numerik, baik 10 atau 2. Jika 10, nilai dalam COLUMN_SIZE dan DECIMAL_DIGITS memberikan jumlah digit desimal yang diizinkan untuk kolom. Misalnya, kolom DECIMAL(12,5) akan mengembalikan NUM_PREC_RADIX 10, COLUMN_SIZE 12, dan DECIMAL_DIGITS 5; kolom FLOAT dapat mengembalikan NUM_PREC_RADIX 10, COLUMN_SIZE 15, dan DECIMAL_DIGITS NULL. Jika nilainya 2, nilai dalam COLUMN_SIZE dan DECIMAL_DIGITS memberikan jumlah bit yang diizinkan dalam kolom. Misalnya, kolom FLOAT dapat mengembalikan RADIX 2, COLUMN_SIZE 53, dan DECIMAL_DIGITS NULL. NULL dikembalikan untuk jenis data di mana NUM_PREC_RADIX tidak berlaku. |
| NULLABLE (ODBC 1.0) | 11 | Smallint bukan NULL | SQL_NO_NULLS jika kolom tidak dapat menyertakan nilai NULL. SQL_NULLABLE jika kolom menerima nilai NULL. SQL_NULLABLE_UNKNOWN jika tidak diketahui apakah kolom menerima nilai NULL. Nilai yang dikembalikan untuk kolom ini berbeda dari nilai yang dikembalikan untuk kolom IS_NULLABLE. Kolom NULLABLE menunjukkan dengan pasti bahwa sebuah kolom dapat menerima NULL, tetapi tidak dapat menunjukkan dengan pasti bahwa sebuah kolom tidak menerima NULL. Kolom IS_NULLABLE menunjukkan dengan pasti bahwa sebuah kolom tidak dapat menerima NULL, tetapi tidak dapat menunjukkan dengan pasti bahwa sebuah kolom menerima NULL. |
| KETERANGAN (ODBC 1.0) | 12 | Varchar | Deskripsi tentang kolom tersebut. |
| COLUMN_DEF (ODBC 3.0) | 13 | Varchar | Nilai default kolom. Nilai dalam kolom ini harus diartikan sebagai string jika dimasukkan dalam tanda kutip. Jika NULL ditentukan sebagai nilai default, kolom ini adalah kata NULL, tidak diapit dalam tanda kutip. Jika nilai default tidak dapat direpresentasikan tanpa pemotongan, kolom ini berisi TRUNCATED, tanpa tanda kutip tunggal. Jika tidak ada nilai default yang ditentukan, kolom ini adalah NULL. Nilai COLUMN_DEF dapat digunakan dalam menghasilkan definisi kolom baru, kecuali ketika berisi nilai TRUNCATED. |
| SQL_DATA_TYPE (ODBC 3.0) | 14 | Smallint bukan NULL | Tipe data SQL, seperti yang muncul di bidang SQL_DESC_TYPE record di IRD. Ini bisa berupa jenis data ODBC SQL atau jenis data SQL khusus driver. Kolom ini sama dengan kolom DATA_TYPE, kecuali untuk jenis data tanggalwaktu dan interval. Kolom ini mengembalikan tipe data nonconcise (seperti SQL_DATETIME atau SQL_INTERVAL), menggantikan tipe data ringkas (seperti SQL_TYPE_DATE atau SQL_INTERVAL_YEAR_TO_MONTH) untuk tipe data datetime dan interval. Jika kolom ini mengembalikan SQL_DATETIME atau SQL_INTERVAL, tipe data spesifik dapat ditentukan dari kolom SQL_DATETIME_SUB. Untuk daftar tipe data ODBC SQL yang valid, lihat Jenis Data SQL di Lampiran D: Jenis Data. Untuk informasi tentang jenis data SQL khusus driver, lihat dokumentasi driver. Tipe data yang dikembalikan untuk ODBC 3. x dan ODBC 2. aplikasi x mungkin berbeda. Untuk informasi selengkapnya, lihat Kompatibilitas Mundur dan Kepatuhan Standar. |
| SQL_DATETIME_SUB (ODBC 3.0) | 15 | Smallint | Kode subjenis untuk jenis data tanggalwaktu dan interval. Untuk jenis data lainnya, kolom ini mengembalikan NULL. Untuk informasi lebih lanjut tentang subkode datetime dan interval, lihat "SQL_DESC_DATETIME_INTERVAL_CODE" di SQLSetDescField. |
| CHAR_OCTET_LENGTH (ODBC 3.0) | 16 | Integer | Panjang maksimum dalam byte dari kolom tipe data karakter atau biner. Untuk semua jenis data lainnya, kolom ini mengembalikan NULL. |
| ORDINAL_POSITION (ODBC 3.0) | 17 | Bilangan bulat bukan NULL | Posisi ordinal kolom dalam tabel. Kolom pertama dalam tabel adalah nomor 1. |
| IS_NULLABLE (ODBC 3.0) | 18 | Varchar | "TIDAK" jika kolom tidak menyertakan NULL. "YA" jika kolom tersebut bisa menyertakan NULL. Kolom ini mengembalikan string panjang nol jika nullability tidak diketahui. Aturan ISO diikuti untuk menentukan nullability. DBMS yang mematuhi ISO SQL tidak dapat mengembalikan string kosong. Nilai yang dikembalikan untuk kolom ini berbeda dari nilai yang dikembalikan untuk kolom NULLABLE. (Lihat deskripsi kolom NULLABLE.) |
Contoh Kode
Dalam contoh berikut, sebuah aplikasi mendeklarasikan buffer untuk set hasil yang dikembalikan oleh SQLColumns. Ia memanggil SQLColumns untuk mengembalikan set hasil yang mendeskripsikan setiap kolom dalam tabel EMPLOYEE. Kemudian memanggil SQLBindCol untuk mengikat kolom dalam set hasil ke buffer. Akhirnya, aplikasi mengambil setiap baris data dengan SQLFetch dan memprosesnya.
// 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;
*/
}
}
}
Fungsi Terkait
| Untuk informasi mengenai | Lihat |
|---|---|
| Mengikat buffer ke kolom dalam tataan hasil | Fungsi SQLBindCol |
| Membatalkan pemrosesan pernyataan | Fungsi SQLCancel |
| Mengembalikan hak istimewa untuk kolom atau kolom | Fungsi SQLColumnPrivileges |
| Mengambil blok data atau menggulir melalui kumpulan hasil | Fungsi SQLFetchScroll |
| Mengambil beberapa baris data | Fungsi SQLFetch |
| Mengembalikan kolom yang secara unik mengidentifikasi baris, atau kolom yang secara otomatis diperbarui oleh transaksi | Fungsi SQLSpecialColumns |
| Menampilkan statistik dan indeks tabel | Fungsi SQLStatistics |
| Mengembalikan daftar tabel dalam sumber data | Fungsi SQLTables |
| Mengembalikan hak istimewa untuk tabel atau tabel | Fungsi SQLTablePrivileges |