Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Handles zijn niet-doorzichtige, 32-bits waarden die een bepaald item identificeren; in ODBC kan dit item een omgeving, verbinding, instructie of descriptor zijn. Wanneer de toepassing SQLAllocHandle aanroept, maakt de Driver Manager of driver een nieuw item van het opgegeven type en retourneert de bijbehorende handle naar de toepassing. De toepassing gebruikt later de handle om het item te identificeren bij het aanroepen van ODBC-functies. De Driver Manager en het stuurprogramma gebruiken de handle om informatie over het item te vinden.
In de volgende code worden bijvoorbeeld twee instructiegrepen (hstmtOrder en hstmtLine) gebruikt om de instructies te identificeren waarop resultatensets van verkooporders en verkooporderregelnummers moeten worden gemaakt. Later worden deze ingangen gebruikt om te bepalen uit welke resultatenset gegevens moeten worden opgehaald.
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);
Ingangen zijn alleen zinvol voor het ODBC-onderdeel dat ze heeft gemaakt; Dat wil zeggen dat alleen Driver Manager ingangen van Driver Manager kan interpreteren en dat alleen een stuurprogramma zijn eigen ingangen kan interpreteren.
Stel dat het stuurprogramma in het vorige voorbeeld een structuur toewijst om informatie over een instructie op te slaan en de aanwijzer als instructiegreep naar deze structuur retourneert. Wanneer de toepassing SQLPrepare aanroept, geeft het een SQL-instructie en de "handle" van de instructie door die wordt gebruikt voor verkooporderregelnummers. Het stuurprogramma verzendt de SQL-instructie naar de gegevensbron, die deze voorbereidt en een toegangsplan-id retourneert. Het stuurprogramma gebruikt het handvat om de structuur te vinden waarin deze identificatie moet worden opgeslagen.
Later roept de toepassing SQLExecute aan om de resultatenset met regelnummers voor een bepaalde verkooporder te genereren, waarbij dezelfde handle wordt doorgegeven. Het stuurprogramma gebruikt de handle om de identificatie van het toegangsplan op te halen uit de structuur. De id wordt naar de gegevensbron verzonden om aan te geven welk plan moet worden uitgevoerd.
ODBC heeft twee niveaus van ingangen: Driver Manager ingangen en stuurprogramma-ingangen. De toepassing gebruikt Driver Manager bij het aanroepen van ODBC-functies, omdat deze functies worden aangeroepen in Driver Manager. Driver Manager gebruikt deze ingang om de bijbehorende stuurprogrammagreep te vinden en gebruikt de stuurprogrammagreep bij het aanroepen van de functie in het stuurprogramma. Voor een voorbeeld van hoe stuurprogramma- en Driver Manager-handles worden gebruikt, zie de rol van Driver Manager in het verbindingsproces.
Dat er twee niveaus van ingangen zijn, is een artefact van de ODBC-architectuur; in de meeste gevallen is het niet relevant voor de toepassing of het stuurprogramma. Hoewel er meestal geen reden is om dit te doen, is het mogelijk voor de toepassing om de stuurprogramma-ingangen te bepalen door SQLGetInfo aan te roepen.
Deze sectie bevat de volgende onderwerpen.