Bagikan melalui


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.

Tidak ada.

Lihat Juga

Referensi API ODBC
File Header ODBC