Mengonversi Data dari SQL ke Jenis Data C
Saat aplikasi memanggil SQLFetch, SQLFetchScroll, atau SQLGetData, driver mengambil data dari sumber data. Jika perlu, ini mengonversi data dari jenis data tempat driver mengambilnya ke jenis data yang ditentukan oleh argumen TargetType di SQLBindCol atau SQLGetData. Terakhir, ia menyimpan data di lokasi yang ditunjukkan oleh argumen TargetValuePtr di SQLBindCol atau SQLGetData (dan bidang SQL_DESC_DATA_PTR ARD).
Tabel berikut ini memperlihatkan konversi yang didukung dari jenis data ODBC SQL ke jenis data ODBC C. Lingkaran yang diisi menunjukkan konversi default untuk jenis data SQL (jenis data C tempat data akan dikonversi saat nilai TargetType SQL_C_DEFAULT). Lingkaran berongga menunjukkan konversi yang didukung.
Untuk aplikasi ODBC 3.x yang bekerja dengan driver ODBC 2.x , konversi dari jenis data khusus driver mungkin tidak didukung.
Format data yang dikonversi tidak terpengaruh oleh pengaturan negara/wilayah Windows.
Tabel di bagian berikut menjelaskan bagaimana driver atau sumber data mengonversi data yang diambil dari sumber data; driver diperlukan untuk mendukung konversi ke semua jenis data ODBC C dari jenis data ODBC SQL yang didukungnya. Untuk jenis data ODBC SQL tertentu, kolom pertama tabel mencantumkan nilai input hukum argumen TargetType di SQLBindCol dan SQLGetData. Kolom kedua mencantumkan hasil pengujian, sering menggunakan argumen BufferLength yang ditentukan dalam SQLBindCol atau SQLGetData, yang dilakukan driver untuk menentukan apakah dapat mengonversi data. Untuk setiap hasil, kolom ketiga dan keempat mencantumkan nilai yang ditempatkan dalam buffer yang ditentukan oleh argumen TargetValuePtr dan StrLen_or_IndPtr yang ditentukan dalam SQLBindCol atau SQLGetData setelah driver mencoba mengonversi data. ( argumen StrLen_or_IndPtr sesuai dengan bidang SQL_DESC_OCTET_LENGTH_PTR ARD.) Kolom terakhir mencantumkan SQLSTATE yang dikembalikan untuk setiap hasil oleh SQLFetch, SQLFetchScroll, atau SQLGetData.
Jika argumen TargetType di SQLBindCol atau SQLGetData berisi pengidentifikasi untuk tipe data ODBC C yang tidak ditampilkan dalam tabel untuk jenis data ODBC SQL tertentu, SQLFetch, SQLFetchScroll, atau SQLGetData mengembalikan SQLSTATE 07006 (Pelanggaran atribut jenis data terbatas). Jika argumen TargetType berisi pengidentifikasi yang menentukan konversi dari jenis data SQL khusus driver ke tipe data ODBC C dan konversi ini tidak didukung oleh driver, SQLFetch, SQLFetchScroll, atau SQLGetData mengembalikan SQLSTATE HYC00 (Fitur opsional tidak diimplementasikan).
Meskipun tidak ditampilkan dalam tabel, driver mengembalikan SQL_NULL_DATA dalam buffer yang ditentukan oleh argumen StrLen_or_IndPtr ketika nilai data SQL adalah NULL. Untuk penjelasan tentang penggunaan StrLen_or_IndPtr saat beberapa panggilan dilakukan untuk mengambil data, lihat deskripsi fungsi SQLGetData . Saat data SQL dikonversi menjadi data karakter C, jumlah karakter yang dikembalikan dalam *StrLen_or_IndPtr tidak menyertakan byte penghentian null. Jika TargetValuePtr adalah penunjuk null, SQLGetData mengembalikan SQLSTATE HY009 (Penggunaan pointer null yang tidak valid); di SQLBindCol, ini memisahkan kolom.
Istilah dan konvensi berikut digunakan dalam tabel:
Panjang byte data adalah jumlah byte data C yang tersedia untuk dikembalikan dalam *TargetValuePtr, apakah data akan dipotong atau tidak sebelum dikembalikan ke aplikasi. Untuk data string, ini tidak menyertakan spasi untuk karakter penghentian null.
Panjang byte karakter adalah jumlah total byte yang diperlukan untuk menampilkan data dalam format karakter. Ini seperti yang didefinisikan untuk setiap jenis data C di bagian Ukuran Tampilan, kecuali panjang byte karakter tersebut dalam byte saat ukuran tampilan dalam karakter.
Kata-kata dalam miring mewakili argumen fungsi atau elemen tata bahasa SQL. Untuk sintaks elemen tata bahasa, lihat Lampiran C: Tata Bahasa SQL.
Bagian ini berisi topik berikut.