Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uchwyty są nieprzezroczystymi, 32-bitowymi wartościami identyfikującymi określony element; w ODBC ten element może być środowiskiem, połączeniem, kwerendą lub deskryptorem. Gdy aplikacja wywołuje funkcję SQLAllocHandle, Menedżer Sterowników lub sterownik tworzy nowy element określonego typu i zwraca jego uchwyt do aplikacji. Aplikacja później używa uchwytu do identyfikowania tego elementu podczas wywoływania funkcji ODBC. Menedżer sterowników i sterownik używają uchwytu do lokalizowania informacji o elemencie.
Na przykład poniższy kod używa dwóch uchwytów instrukcji (hstmtOrder i hstmtLine), aby zidentyfikować instrukcje, na których mają zostać utworzone wyniki zestawów zamówień sprzedaży i numery linii zamówień sprzedaży. Później użyje tych uchwytów, aby zidentyfikować, z którego zestawu wyników pobrać dane.
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);
Uchwyty mają znaczenie tylko dla składnika ODBC, który je utworzył; oznacza to, że tylko menedżer sterowników może interpretować uchwyty Menedżera sterowników, a tylko sterownik może interpretować własne uchwyty.
Załóżmy na przykład, że sterownik w poprzednim przykładzie przydziela strukturę do przechowywania informacji o poleceniu i zwraca wskaźnik do tej struktury jako uchwyt polecenia. Gdy aplikacja wywołuje narzędzie SQLPrepare, przekazuje instrukcję SQL i obsługę instrukcji używanej dla numerów wierszy zamówienia sprzedaży. Sterownik wysyła instrukcję SQL do źródła danych, które je przygotowuje i zwraca identyfikator planu dostępu. Sterownik używa uchwytu, aby znaleźć strukturę, w której ma być przechowywany ten identyfikator.
Później, gdy aplikacja wywołuje funkcję SQLExecute w celu wygenerowania zestawu wyników numerów wierszy dla określonego zamówienia sprzedaży, przekazuje ten sam uchwyt. Sterownik używa uchwytu do pobrania identyfikatora planu dostępu ze struktury. Wysyła identyfikator do źródła danych, aby poinformować go, który plan ma zostać wykonany.
ODBC ma dwa poziomy uchwytów: uchwyty menedżera sterowników i uchwyty sterowników. Aplikacja używa uchwytów Menedżera Sterowników podczas wywoływania funkcji ODBC, ponieważ te funkcje są wywoływane w Menedżerze Sterowników. Menedżer sterowników używa tego uchwytu do znalezienia odpowiedniego uchwytu sterownika i używa uchwytu sterownika podczas wywoływania funkcji w sterowniku. Aby zapoznać się z przykładem sposobu obsługi sterowników i menedżera sterowników, zobacz Rola Menedżera sterowników w procesie połączenia.
Istnienie dwóch poziomów uchwytów jest artefaktem architektury ODBC; w większości przypadków nie ma znaczenia ani dla aplikacji, ani dla sterownika. Chociaż zwykle nie ma powodu, aby to uczynić, aplikacja może określić uchwyty sterowników, wywołując SQLGetInfo.
Ta sekcja zawiera następujące tematy.