Version 3.0 is a major update to ODBC--more major than previous versions have been. To align it with the new standard, Microsoft added about 20 function calls, additional data types, and scalar functions.

ODBC 3.0 includes binding, fetching, and bookmark enhancements. It provides variable-length bookmarks and can update and delete using bookmarks. It supports fetches based on search conditions, row-wise parameter binding, and quick rebinding using offsets from bound-
variable addresses.

Programmers writing for ODBC 2.0 use connection and statement options to govern behavior such as whether a driver should use native cursors or the ODBC Cursor Library. ODBC 3.0 supersedes these options with attributes and adds application-level environment attributes. It also adds diagnostic data structures to make error handling more flexible.

Previously, an application typically used a loop to call SQLError for error codes and messages. SQLError has a fixed number of arguments and returns, but the new diagnostics use extensible data structures so you can provide additional error information.

ODBC 3.0 adds descriptors comparable to those in SQL-92 and similar to the information stored in the SQL Descriptor Area (SQLDA) of embedded SQL programs. Descriptors are data structures that store information about rows or parameters. Applications can use a number of descriptors, so version 3.0 uses handles to keep track of them. It adds a new generic handle-allocation function, SQLAllocHandle, that lets you define it as an environment, connection, statement, or descriptor handle.

Version 3.0 changes the date/time data type and adds large binary and character objects, intervals, and Unicode data types. It also supports ANSI and Unicode versions of all functions. ODBC 3.0 adds SQL3-style locators to handle large objects and several new locator functions (e.g., SQLGetPosition and SQLGetSubString) to work with substrings within large character objects. Finally, version 3.0 adds an uninstaller and views to expose schema information.