Handles

Handel adalah nilai buram, 32-bit yang mengidentifikasi item tertentu; di ODBC, item ini dapat berupa lingkungan, koneksi, pernyataan, atau deskriptor. Ketika aplikasi memanggil SQLAllocHandle, Driver Manager atau driver membuat item baru dari jenis yang ditentukan dan mengembalikan handelnya ke aplikasi. Aplikasi nantinya menggunakan handel untuk mengidentifikasi item tersebut saat memanggil fungsi ODBC. Manajer Driver dan driver menggunakan handel untuk menemukan informasi tentang item.

Misalnya, kode berikut menggunakan dua handel pernyataan (hstmtOrder dan hstmtLine) untuk mengidentifikasi pernyataan untuk membuat kumpulan hasil pesanan penjualan dan nomor baris pesanan penjualan. Ini nantinya menggunakan handel ini untuk mengidentifikasi tataan hasil mana yang akan diambil datanya.

SQLHSTMT      hstmtOrder, hstmtLine; // Statement handles.  
SQLUINTEGER   OrderID;  
SQLINTEGER    OrderIDInd = 0;  
SQLRETURN     rc;  
  
// Prepare the statement that retrieves line number information.  
SQLPrepare(hstmtLine, "SELECT * FROM Lines WHERE OrderID = ?", SQL_NTS);  
  
// Bind OrderID to the parameter in the preceding statement.  
SQLBindParameter(hstmtLine, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0,  
               &OrderID, 0, &OrderIDInd);  
  
// Bind the result sets for the Order table and the Lines table. Bind  
// OrderID to the OrderID column in the Orders table. When each row is  
// fetched, OrderID will contain the current order ID, which will then be  
// passed as a parameter to the statement tofetch line number  
// information. Code not shown.  
  
// Create a result set of sales orders.  
SQLExecDirect(hstmtOrder, "SELECT * FROM Orders", SQL_NTS);  
  
// Fetch and display the sales order data. Code to check if rc equals  
// SQL_ERROR or SQL_SUCCESS_WITH_INFO not shown.  
while ((rc = SQLFetch(hstmtOrder)) != SQL_NO_DATA) {  
   // Display the sales order data. Code not shown.  
  
   // Create a result set of line numbers for the current sales order.  
   SQLExecute(hstmtLine);  
  
   // Fetch and display the sales order line number data. Code to check  
   // if rc equals SQL_ERROR or SQL_SUCCESS_WITH_INFO not shown.  
   while ((rc = SQLFetch(hstmtLine)) != SQL_NO_DATA) {  
      // Display the sales order line number data. Code not shown.  
   }  
  
   // Close the sales order line number result set.  
   SQLCloseCursor(hstmtLine);  
}  
  
// Close the sales order result set.  
SQLCloseCursor(hstmtOrder);  

Handel hanya bermakna untuk komponen ODBC yang membuatnya; artinya, hanya Driver Manager yang dapat menginterpretasikan handel Driver Manager dan hanya driver yang dapat menafsirkan handelnya sendiri.

Misalnya, misalkan driver dalam contoh sebelumnya mengalokasikan struktur untuk menyimpan informasi tentang pernyataan dan mengembalikan penunjuk ke struktur ini sebagai handel pernyataan. Ketika aplikasi memanggil SQLPrepare, aplikasi melewati pernyataan SQL dan handel pernyataan yang digunakan untuk nomor baris pesanan penjualan. Driver mengirim pernyataan SQL ke sumber data, yang menyiapkannya dan mengembalikan pengidentifikasi rencana akses. Driver menggunakan handel untuk menemukan struktur untuk menyimpan pengidentifikasi ini.

Kemudian, ketika aplikasi memanggil SQLExecute untuk menghasilkan kumpulan hasil nomor baris untuk pesanan penjualan tertentu, aplikasi melewati handel yang sama. Driver menggunakan handel untuk mengambil pengidentifikasi rencana akses dari struktur. Ini mengirim pengidentifikasi ke sumber data untuk memberi tahu rencana mana yang akan dijalankan.

ODBC memiliki dua tingkat handel: Handel Driver Manager dan handel driver. Aplikasi ini menggunakan handel Driver Manager saat memanggil fungsi ODBC karena memanggil fungsi tersebut di Driver Manager. Manajer Driver menggunakan handel ini untuk menemukan handel pengandar yang sesuai dan menggunakan handel driver saat memanggil fungsi pada driver. Untuk contoh cara driver dan Driver Manager menangani penggunaan, lihat Peran Manajer Driver dalam Proses Koneksi ion.

Bahwa ada dua tingkat handel adalah artefak arsitektur ODBC; dalam kebanyakan kasus, tidak relevan dengan aplikasi atau driver. Meskipun biasanya tidak ada alasan untuk melakukannya, aplikasi dapat menentukan handel driver dengan memanggil SQLGetInfo.

Bagian ini berisi topik berikut.