Fungsi SQLNativeSql
Kesesuaian
Versi Diperkenalkan: Kepatuhan Standar ODBC 1.0: ODBC
Ringkasan
SQLNativeSql mengembalikan string SQL seperti yang dimodifikasi oleh driver. SQLNativeSql tidak menjalankan pernyataan SQL.
Sintaks
SQLRETURN SQLNativeSql(
SQLHDBC ConnectionHandle,
SQLCHAR * InStatementText,
SQLINTEGER TextLength1,
SQLCHAR * OutStatementText,
SQLINTEGER BufferLength,
SQLINTEGER * TextLength2Ptr);
Argumen
ConnectionHandle
[Input] Handel koneksi.
InStatementText
[Input] String teks SQL yang akan diterjemahkan.
TextLength1
[Input] Panjang karakter *String teks InStatementText .
OutStatementText
[Output] Penunjuk ke buffer untuk mengembalikan string SQL yang diterjemahkan.
Jika OutStatementText adalah NULL, TextLength2Ptr masih akan mengembalikan jumlah total karakter (tidak termasuk karakter penghentian null untuk data karakter) yang tersedia untuk dikembalikan dalam buffer yang ditunjukkan oleh OutStatementText.
BufferLength
[Input] Jumlah karakter dalam buffer *OutStatementText . Versi sebelumnya dari dokumentasi ini secara keliru menyiratkan bahwa jumlah karakter ini harus bahkan jika nilai yang dikembalikan dalam *InStatementText adalah string Unicode (saat memanggil SQLNativeSqlW). Tidak ada batasan seperti itu. Untuk interoperabilitas yang optimal, penulis driver harus mengharapkan jumlah karakter apa pun untuk diteruskan ke fungsi ini, sementara penulis aplikasi disarankan untuk selalu menggunakan jumlah genap.
TextLength2Ptr
[Output] Penunjuk ke buffer untuk mengembalikan jumlah total karakter (tidak termasuk penghentian null) yang tersedia untuk dikembalikan dalam *OutStatementText. Jika jumlah karakter yang tersedia untuk dikembalikan lebih besar dari atau sama dengan BufferLength, string SQL yang diterjemahkan dalam *OutStatementText dipotong menjadi BufferLength dikurangi panjang karakter penghentian null.
Kembali
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, atau SQL_INVALID_HANDLE.
Diagnostik
Ketika SQLNativeSql mengembalikan SQL_ERROR atau SQL_SUCCESS_WITH_INFO, nilai SQLSTATE terkait dapat diperoleh dengan memanggil SQLGetDiagRec dengan HandleType SQL_HANDLE_DBC dan Handle of ConnectionHandle. Tabel berikut mencantumkan nilai SQLSTATE yang umumnya dikembalikan oleh SQLNativeSql 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 | Buffer *OutStatementText tidak cukup besar untuk mengembalikan seluruh string SQL, sehingga string SQL terpotong. Panjang string SQL yang tidak terpotong dikembalikan dalam *TextLength2Ptr. (Fungsi mengembalikan SQL_SUCCESS_WITH_INFO.) |
08003 | Koneksi tidak terbuka | ConnectionHandle tidak dalam status tersambung. |
08S01 | Kegagalan tautan komunikasi | Tautan komunikasi antara driver dan sumber data tempat driver tersambung gagal sebelum fungsi selesai diproses. |
22007 | Format tanggalwaktu tidak valid | *InStatementText berisi klausul escape dengan nilai tanggal, waktu, atau tanda waktu yang tidak valid. |
24000 | Status kursor tidak valid | Kursor yang dimaksud dalam pernyataan diposisikan sebelum awal kumpulan hasil atau setelah akhir kumpulan hasil. Kesalahan ini mungkin tidak dikembalikan oleh driver yang memiliki implementasi kursor DBMS asli. |
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. |
HY009 | Penggunaan pointer null tidak valid | (DM) *InStatementText adalah pointer null. |
HY010 | Kesalahan urutan fungsi | (DM) Fungsi eksekusi asinkron dipanggil untuk ConnectionHandle dan masih dijalankan ketika fungsi ini dipanggil. |
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) Argumen TextLength1 kurang dari 0, tetapi tidak sama dengan SQL_NTS. |
(DM) Argumen BufferLength kurang dari 0 dan argumen OutStatementText bukan pointer null. | ||
HY109 | Posisi kursor tidak valid | Baris kursor saat ini telah dihapus atau belum diambil. Kesalahan ini mungkin tidak dikembalikan oleh driver yang memiliki implementasi kursor DBMS asli. |
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. |
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 terkait dengan ConnectionHandle tidak mendukung fungsi. |
Komentar
Berikut ini adalah contoh apa yang mungkin dikembalikan SQLNativeSql untuk string SQL input berikut yang berisi fungsi skalar CONVERT. Asumsikan bahwa empid kolom berjenis INTEGER di sumber data:
SELECT { fn CONVERT (empid, SQL_SMALLINT) } FROM employee
Driver untuk Microsoft SQL Server mungkin mengembalikan string SQL yang diterjemahkan berikut ini:
SELECT convert (smallint, empid) FROM employee
Driver untuk ORACLE Server mungkin mengembalikan string SQL yang diterjemahkan berikut:
SELECT to_number (empid) FROM employee
Driver untuk Ingres mungkin mengembalikan string SQL yang diterjemahkan berikut:
SELECT int2 (empid) FROM employee
Untuk informasi selengkapnya, lihat Eksekusi Langsung dan Eksekusi yang Disiapkan.
Fungsi Terkait
Tidak ada.