Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tanıtıcılar, belirli bir öğeyi tanımlayan opak, 32 bit değerlerdir; ODBC'de bu öğe bir ortam, bağlantı, deyim veya tanımlayıcı olabilir. Uygulama SQLAllocHandle'ı çağırdığında, Sürücü Yöneticisi veya sürücüsü belirtilen türde yeni bir öğe oluşturur ve tutamacını uygulamaya döndürür. Uygulama daha sonra ODBC işlevlerini çağırırken bu öğeyi tanımlamak için tanıtıcıyı kullanır. Sürücü Yöneticisi ve sürücü, öğe hakkındaki bilgileri bulmak için tutamacını kullanır.
Örneğin, aşağıdaki kod, satış siparişleri ve satış siparişi satır numaralarının sonuç kümelerinin oluşturulacağı deyimleri tanımlamak için iki deyim tutamacı (hstmtOrder ve hstmtLine) kullanır. Daha sonra bu tanıtıcıları kullanarak hangi sonuç kümesinden veri getirileceğini belirler.
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);
Tanıtıcılar yalnızca bunları oluşturan ODBC bileşeni için anlamlıdır; başka bir ifadeyle, yalnızca Sürücü Yöneticisi Driver Manager tanıtıcılarını yorumlayabilir ve yalnızca bir sürücü kendi tanıtıcılarını yorumlayabilir.
Örneğin, önceki örnekteki sürücünün bir deyim hakkındaki bilgileri depolamak için bir yapı ayırıp işaretçiyi bu yapıya deyim tanıtıcısı olarak döndürdüğü varsayın. Uygulama SQLPrepare'yi çağırdığında, bir SQL deyimini ve satış siparişi satır numaraları için kullanılan deyimin tutamacını geçirir. Sürücü SQL deyimini veri kaynağına gönderir ve bu deyimi hazırlar ve bir erişim planı tanımlayıcısı döndürür. Sürücü, bu tanımlayıcıyı depolayacak yapıyı bulmak için sapı kullanır.
Daha sonra, uygulama belirli bir satış siparişi için satır numaralarının sonuç kümesini oluşturmak amacıyla SQLExecute çağrısını yaptığında aynı tanıtıcıyı geçirir. Sürücü, yapıdan erişim planı tanımlayıcısını almak için tanıtıcıyı kullanır. Yürütülecek planı bildirmek için tanımlayıcıyı veri kaynağına gönderir.
ODBC'nin iki tanıtıcı seviyesi vardır: Sürücü Yöneticisi tanıtıcıları ve sürücü tanıtıcıları. Uygulama, bu işlevleri Driver Manager'da çağırdığı için, ODBC işlevlerini çağırırken Driver Manager tanıtıcılarını kullanır. Sürücü Yöneticisi, ilgili sürücü tutamacını bulmak için bu tanıtıcıyı kullanır ve sürücüdeki bir işlevi çağırırken bu sürücü tutamacını kullanır. Sürücü ve Sürücü Yöneticisi'nin nasıl işlendiğine ilişkin bir örnek için bkz. Bağlantı İşlemindeki Sürücü YöneticisiNin Rolü.
İki tutamaç düzeyi olması ODBC mimarisinin bir yapıtıdır; çoğu durumda, uygulama veya sürücü ile ilgili değildir. Bunu yapmak için genellikle bir neden olmasa da, uygulamanın SQLGetInfo çağırarak sürücü tanıtıcılarını belirlemesi mümkündür.
Bu bölüm aşağıdaki konuları içerir.