Fungsi SQLGetStmtAttr
Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 3.0: ISO 92
Ringkasan
SQLGetStmtAttr mengembalikan pengaturan atribut pernyataan saat ini.
Catatan
Untuk informasi selengkapnya tentang apa Manajer Driver memetakan fungsi ini ketika ODBC 3.aplikasi x bekerja dengan ODBC 2.x driver, lihat Memetakan Fungsi Penggantian untuk Kompatibilitas Aplikasi Mundur.
Sintaks
SQLRETURN SQLGetStmtAttr(
SQLHSTMT StatementHandle,
SQLINTEGER Attribute,
SQLPOINTER ValuePtr,
SQLINTEGER BufferLength,
SQLINTEGER * StringLengthPtr);
Argumen
StatementHandle
[Input] Handel pernyataan.
Atribut
[Input] Atribut yang akan diambil.
ValuePtr
[Output] Penunjuk ke buffer untuk mengembalikan nilai atribut yang ditentukan dalam Atribut.
Jika ValuePtr adalah NULL, StringLengthPtr masih akan mengembalikan jumlah total byte (tidak termasuk karakter penghentian null untuk data karakter) yang tersedia untuk dikembalikan dalam buffer yang ditujukkan oleh ValuePtr.
BufferLength
[Input] Jika Atribut adalah atribut yang ditentukan ODBC dan ValuePtr menunjuk ke string karakter atau buffer biner, argumen ini harus panjangnya *ValuePtr. Jika Atribut adalah atribut yang ditentukan ODBC dan *ValuePtr adalah bilangan bulat, BufferLength diabaikan. Jika nilai yang dikembalikan dalam *ValuePtr adalah string Unicode (saat memanggil SQLGetStmtAttrW), argumen BufferLength harus berupa angka genap.
Jika Atribut adalah atribut yang ditentukan driver, aplikasi menunjukkan sifat atribut ke Driver Manager dengan mengatur argumen BufferLength . BufferLength dapat memiliki nilai berikut:
Jika *ValuePtr adalah penunjuk ke string karakter, maka BufferLength adalah panjang string atau SQL_NTS.
Jika *ValuePtr adalah penunjuk ke buffer biner, maka aplikasi menempatkan hasil makro SQL_LEN_BINARY_ATTR(length) di BufferLength. Ini menempatkan nilai negatif di BufferLength.
Jika *ValuePtr adalah penunjuk ke nilai selain string karakter atau string biner, maka BufferLength harus memiliki nilai SQL_IS_POINTER.
Jika *ValuePtr berisi jenis data panjang tetap, maka BufferLength SQL_IS_INTEGER atau SQL_IS_UINTEGER, sebagaimana mewajibkan.
StringLengthPtr
[Output] Penunjuk ke buffer untuk mengembalikan jumlah total byte (tidak termasuk karakter penghentian null) yang tersedia untuk dikembalikan dalam *ValuePtr. Jika nilai atribut adalah string karakter, dan jumlah byte yang tersedia untuk dikembalikan lebih besar dari atau sama dengan BufferLength, data dalam *ValuePtr dipotong menjadi BufferLength dikurangi panjang karakter null-termination dan dihentikan null oleh driver.
Kembali
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, atau SQL_INVALID_HANDLE.
Diagnostik
Ketika SQLGetStmtAttr mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_STMT dan Handle of StatementHandle. Tabel berikut mencantumkan nilai SQLSTATE yang umumnya dikembalikan oleh SQLGetStmtAttr dan menjelaskan masing-masing dalam konteks fungsi ini; notasi "(DM)" mendahului deskripsi SQLSTATEs 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.) |
01004 | Data string, terpotong kanan | Data yang dikembalikan dalam *ValuePtr dipotong menjadi BufferLength dikurangi panjang karakter penghentian null. Panjang nilai string yang tidak terpotong dikembalikan dalam *StringLengthPtr. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.) |
24000 | Status kursor tidak valid | Atribut argumen SQL_ATTR_ROW_NUMBER dan kursor tidak terbuka, atau kursor diposisikan sebelum awal kumpulan hasil atau setelah akhir tataan hasil. |
HY000 | Kesalahan umum | Terjadi kesalahan yang tidak ada SQLSTATE tertentu dan tidak ada SQLSTATE khusus implementasi yang ditentukan. Pesan kesalahan yang dikembalikan oleh SQLGetDiagRec dalam argumen MessageText menjelaskan kesalahan dan penyebabnya. |
HY001 | Kesalahan alokasi memori | Driver tidak dapat mengalokasikan memori yang diperlukan untuk mendukung eksekusi atau penyelesaian fungsi. |
HY010 | Kesalahan urutan fungsi | (DM) Fungsi eksekusi asinkron dipanggil untuk handel koneksi yang terkait dengan StatementHandle. Fungsi asinkron ini masih dijalankan ketika fungsi SQLGetStmtAttr dipanggil. (DM) Fungsi eksekusi asinkron 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) *ValuePtr adalah string karakter, dan BufferLength kurang dari nol, tetapi tidak sama dengan SQL_NTS. |
HY092 | Pengidentifikasi atribut/opsi tidak valid | Nilai yang ditentukan untuk atribut argumen tidak valid untuk versi ODBC yang didukung oleh driver. |
HY109 | Posisi kursor tidak valid | Argumen Atribut SQL_ATTR_ROW_NUMBER dan baris telah dihapus atau tidak dapat diambil. |
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 | Nilai yang ditentukan untuk atribut argumen adalah atribut pernyataan ODBC yang valid untuk versi ODBC yang didukung oleh driver, tetapi tidak didukung oleh driver. |
HYT01 | Kesalahan waktu habis koneksi kedaluwarsa | 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 sesuai dengan StatementHandle tidak mendukung fungsi. |
Komentar
Untuk informasi umum tentang atribut pernyataan, lihat Atribut Pernyataan.
Panggilan ke SQLGetStmtAttr mengembalikan * ValuePtr nilai atribut pernyataan yang ditentukan dalam Atribut. Nilai tersebut dapat berupa nilai SQLULEN atau string karakter yang dihentikan null. Jika nilainya adalah nilai SQLULEN, beberapa driver hanya dapat menulis buffer 32-bit atau 16-bit yang lebih rendah dan membiarkan bit berurutan lebih tinggi tidak berubah. Oleh karena itu, aplikasi harus menggunakan buffer SQLULEN dan menginisialisasi nilai ke 0 sebelum memanggil fungsi ini. Selain itu , argumen BufferLength dan StringLengthPtr tidak digunakan. Jika nilai adalah string yang dihentikan null, aplikasi menentukan panjang maksimum string tersebut dalam argumen BufferLength , dan driver mengembalikan panjang string tersebut dalam buffer *StringLengthPtr .
Untuk memungkinkan aplikasi memanggil SQLGetStmtAttr untuk bekerja dengan ODBC 2.driver x , panggilan ke SQLGetStmtAttr dipetakan di Driver Manager ke SQLGetStmtOption.
Atribut pernyataan berikut bersifat baca-saja, sehingga dapat diambil oleh SQLGetStmtAttr, tetapi tidak diatur oleh SQLSetStmtAttr:
SQL_ATTR_IMP_PARAM_DESC
SQL_ATTR_IMP_ROW_DESC
SQL_ATTR_ROW_NUMBER
Untuk daftar atribut yang dapat diatur dan diambil, lihat SQLSetStmtAttr.
Fungsi Terkait
Untuk informasi tentang | Lihat |
---|---|
Mengembalikan pengaturan atribut koneksi | Fungsi SQLGetConnectAttr |
Mengatur atribut koneksi | Fungsi SQLSetConnectAttr |
Mengatur atribut pernyataan | Fungsi SQLSetStmtAttr |