Descriptor Handles
Four descriptors (one filling each role) are allocated automatically when a
statement is allocated. These are known as automatically allocated descriptors and are always associated with that statement. Applications can also allocate
descriptors with SQLAllocHandle. These are known as explicitly allocated descriptors. They are allocated on a connection and can be associated with one or more
statements on that connection to fulfill the role of an APD or ARD on those
statements.
Most operations in ODBC can be performed without explicit use of descriptors
by the application. However, descriptors provide a convenient shortcut for some
operations. For example, suppose an application wants to insert data from two
different sets of buffers. To use the first set of buffers, it would repeatedly
call SQLBindParameter to bind them to the parameters in an INSERT statement, and then execute the statement. To use the second set of buffers,
it would repeat this process. Alternatively, it could set up bindings to the
first set of buffers in one descriptor and to the second set of buffers in
another descriptor. To switch between the sets of bindings, it would simply call SQLSetStmtAttr and associate the correct descriptor with the statement as the APD.
For more information about descriptors, see “Types of Descriptors” in Chapter 13, “Descriptors.”
Application Parameter Descriptor (APD). Contains information about the application buffers bound to the parameters
in an SQL statement, such as their addresses, lengths, and C data types.
Implementation Parameter Descriptor (IPD). Contains information about the parameters in an SQL statement, such as their
SQL data types, lengths, and nullability.
Application Row Descriptor (ARD). Contains information about the application buffers bound to the columns in a
result set, such as their addresses, lengths, and C data types.
Implementation Row Descriptor (IRD). Contains information about the columns in a result set, such as their SQL
data types, lengths, and nullability.