Membuat Aplikasi Driver - Mode Asinkron dan SQLCancel
Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Penting
SQL Server Native Client (SNAC) tidak dikirim dengan:
- SQL Server 2022 (16.x) dan versi yang lebih baru
- SQL Server Management Studio 19 dan versi yang lebih baru
SQL Server Native Client (SQLNCLI atau SQLNCLI11) dan Penyedia Microsoft OLE DB warisan untuk SQL Server (SQLOLEDB) tidak direkomendasikan untuk pengembangan aplikasi baru.
Untuk proyek baru, gunakan salah satu driver berikut:
Untuk SQLNCLI yang dikirim sebagai komponen SQL Server Database Engine (versi 2012 hingga 2019), lihat pengecualian Siklus Hidup Dukungan ini.
Beberapa fungsi ODBC dapat beroperasi baik secara sinkron atau asinkron. Aplikasi dapat mengaktifkan operasi asinkron untuk handel pernyataan atau handel koneksi. Jika opsi diatur untuk handel koneksi, opsi tersebut memengaruhi semua handel pernyataan pada handel koneksi. Aplikasi ini menggunakan pernyataan berikut untuk mengaktifkan atau menonaktifkan operasi asinkron:
SQLSetConnectAttr(hdbc, SQL_ATTR_ASYNC_ENABLE,
SQL_ASYNC_ENABLE_ON, SQL_IS_INTEGER);
SQLSetConnectAttr(hdbc, SQL_ATTR_ASYNC_ENABLE,
SQL_ASYNC_ENABLE_OFF, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ASYNC_ENABLE,
SQL_ASYNC_ENABLE_ON, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ASYNC_ENABLE,
SQL_ASYNC_ENABLE_OFF, SQL_IS_INTEGER);
Ketika aplikasi memanggil fungsi ODBC dalam mode sinkron, driver tidak mengembalikan kontrol ke aplikasi sampai diberi tahu bahwa server telah menyelesaikan perintah.
Saat beroperasi secara asinkron, driver segera mengembalikan kontrol ke aplikasi, bahkan sebelum mengirim perintah ke server. Driver mengatur kode pengembalian ke SQL_STILL_EXECUTING. Aplikasi kemudian dapat melakukan pekerjaan lain.
Ketika aplikasi menguji penyelesaian perintah, aplikasi melakukan panggilan fungsi yang sama dengan parameter yang sama ke driver. Jika driver belum menerima jawaban dari server, driver akan kembali SQL_STILL_EXECUTING. Aplikasi harus menguji perintah secara berkala sampai kode pengembalian adalah sesuatu selain SQL_STILL_EXECUTING. Ketika aplikasi mendapatkan beberapa kode pengembalian lainnya, bahkan SQL_ERROR, aplikasi dapat menentukan bahwa perintah telah selesai.
Terkadang perintah luar biasa untuk waktu yang lama. Jika aplikasi perlu membatalkan perintah tanpa menunggu balasan, aplikasi dapat melakukannya dengan memanggil SQLCancel dengan handel pernyataan yang sama dengan perintah yang luar biasa. Ini adalah satu-satunya waktu SQLCancel harus digunakan. Beberapa programmer menggunakan SQLCancel ketika mereka telah memproses sebagian melalui tataan hasil dan ingin membatalkan sisa kumpulan hasil. SQLMoreResults atau SQLCloseCursor harus digunakan untuk membatalkan sisa kumpulan hasil yang luar biasa, bukan SQLCancel.