Pemberitahuan Penyelesaian Fungsi Asinkron
Di Windows 8 SDK, ODBC menambahkan mekanisme untuk memberi tahu aplikasi ketika operasi asinkron selesai, yang akan kami sebut sebagai "pemberitahuan tentang penyelesaian". (Lihat Eksekusi Asinkron (Metode Pemberitahuan) untuk informasi selengkapnya.) Topik ini membahas beberapa masalah untuk pengembang driver.
Driver Manager secara internal menyediakan fungsi panggilan balik Fungsi SQLAsyncNotificationCallback. SQLAsyncNotificationCallback hanya dapat dipanggil oleh driver -- aplikasi tidak dapat langsung memanggilnya. Driver memanggil SQLAsyncNotificationCallback setiap kali data baru diterima dari server setelah terakhir kembali SQL_STILL_EXECUTING.
Driver Manager menyediakan mekanisme panggilan balik sehingga driver dapat memberi tahu Manajer Driver ketika beberapa kemajuan telah dibuat dalam menjalankan operasi asinkron setelah fungsi yang sesuai mengembalikan SQL_STILL_EXECUTING
Manajer Driver mengatur atribut SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK pada handel koneksi driver dengan penunjuk fungsi non-NULL, yang berjenis SQL_ASYNC_NOTIFICATION_CALLBACK, agar driver berfungsi dalam mode pemberitahuan untuk setiap operasi asinkron pada handel tersebut. Demikian pula, Driver Manager mengatur atribut SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK pada handel pernyataan driver dengan penunjuk fungsi non-NULL, yang juga merupakan jenis SQL_ASYNC_NOTIFICATION_CALLBACK, agar driver berfungsi dalam mode pemberitahuan untuk setiap operasi asinkron pada handel tersebut.
Jika operasi asinkron dilakukan pada handel driver, fungsi driver asinkron harus bekerja dengan gaya non-pemblokiran. Jika operasi tidak dapat segera diselesaikan, fungsi driver harus mengembalikan SQL_STILL_EXECUTING. Persyaratan ini berlaku untuk mode polling dan mode pemberitahuan.
Jika handel dalam mode asinkron pemberitahuan, driver harus memanggil fungsi panggilan balik pemberitahuan, yang alamatnya adalah nilai untuk atribut SQL_ATTR_ASYNC_DBC_NOTIFICATION_CALLBACK atau SQL_ATTR_ASYNC_STMT_NOTIFICATION_CALLBACK, sekali setelah mengembalikan SQL_STILL_EXECUTING. Dengan kata lain, satu SQL_STILL_EXECUTING yang kembali harus dipasangkan dengan satu pemanggilan fungsi panggilan balik pemberitahuan. Driver harus menggunakan nilai saat ini dari atribut handle SQL_ATTR_ASYNC_DBC_NOTIFICATION_CONTEXT atau SQL_ATTR_ASYNC_STMT_NOTIFICATION_CONTEXT sebagai nilai untuk parameter fungsi panggilan kembali pContext.
Driver tidak boleh memanggil kembali utas yang memanggil fungsi driver; tidak ada alasan untuk memberi tahu kemajuan sebelum fungsi kembali. Driver harus menggunakan utasnya sendiri untuk memanggil balik. Driver Manager tidak akan menggunakan utas panggilan balik driver untuk menjalankan logika pemrosesan yang luas.
Manajer Driver akan memanggil fungsi asli lagi setelah driver memanggil kembali. Driver Manager dapat menggunakan utas yang bukan utas aplikasi atau utas driver. Jika driver menggunakan beberapa informasi yang terkait dengan utas (misalnya, token keamanan atau pengidentifikasi pengguna), driver harus menyimpan informasi yang diperlukan dalam panggilan asinkron awal dan menggunakan nilai tersimpan sebelum seluruh operasi asinkron selesai. Biasanya, hanya SQLDriver Koneksi, SQL Koneksi, atau SQLBrowse Koneksi yang perlu menggunakan informasi semacam itu.