Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Popisovače jsou neprůhlené, 32bitové hodnoty, které identifikují konkrétní položku; v rozhraní ODBC může být tato položka prostředí, připojení, příkaz nebo popisovač. Když aplikace volá SQLAllocHandle, Driver Manager nebo ovladač vytvoří novou položku zadaného typu a vrátí její popisovač aplikaci. Aplikace později použije popisovač k identifikaci této položky při volání funkcí ODBC. Správce ovladačů a ovladač používají popisovač k vyhledání informací o položce.
Následující kód například používá dva popisovače příkazů (hstmtOrder a hstmtLine) k identifikaci příkazů, pro které se mají vytvořit sady výsledků prodejních objednávek a čísel řádků prodejní objednávky. Později tyto popisovače použije k identifikaci sady výsledků, ze které se mají načítat data.
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);
Popisovače jsou smysluplné pouze pro komponentu ODBC, která je vytvořila; to znamená, že pouze Správce ovladačů může interpretovat popisovače Správce ovladačů a pouze ovladač může interpretovat vlastní popisovače.
Předpokládejme například, že ovladač v předchozím příkladu přidělí strukturu pro uložení informací o příkazu a vrátí ukazatel na tuto strukturu jako popisovač příkazu. Když aplikace volá SQLPrepare, předá příkaz SQL a popisovač příkazu používaný pro čísla položek v prodejní objednávce. Ovladač odešle příkaz SQL do zdroje dat, který ho připraví a vrátí identifikátor plánu přístupu. Ovladač používá popisovač k vyhledání struktury, ve které má být tento identifikátor uložen.
Později, když aplikace zavolá SQLExecute, aby vygenerovala sadu výsledků čísel řádků pro konkrétní prodejní objednávku, použije stejný popisovač. Ovladač používá popisovač k načtení identifikátoru plánu přístupu ze struktury. Odešle identifikátor zdroji dat, aby určil, který plán se má provést.
Rozhraní ODBC má dvě úrovně popisovačů: popisovače Správce ovladačů a popisovače ovladačů. Aplikace používá správce ovladačů při volání funkcí ODBC, protože volá tyto funkce ve Správci ovladačů. Správce ovladačů používá tento popisovač k vyhledání odpovídajícího popisovače ovladače a při volání funkce v ovladači použije popisovač ovladače. Příklad použití popisovačů ovladačů a správce ovladačů najdete v tématu Role Správce ovladačů v procesu připojení.
Existence dvou úrovní popisovačů je artefaktem architektury ODBC; ve většině případů není relevantní pro aplikaci nebo ovladače. I když obvykle není důvod k tomu, aplikace může určit popisovače zavoláním SQLGetInfo.
Tato část obsahuje následující témata.