Checking Feature Support and Variability Function Mapping in the Driver Manager Binding Parameter Markers State Transitions Connecting Directly to Drivers Conformance Levels Handles SQL Statements Constructed at Run Time Mapping Replacement Functions for Backward Compatibility of Applications Arguments in Catalog Functions Explicitly Allocated Descriptors Descriptor Fields Asynchronous Execution SQLSTATEs Custom Applications Data Buffer Address Schema Views Prepared Execution ODBC Executing Batches Scrollable Cursors and Transaction Isolation Calling SQLCloseCursor Descriptors Driver Manager Error and Warning Checks Constructing SQL Statements Driver Manager Connection Pooling Identifier Case Level 1 Interface Conformance Freeing a Statement Handle ODBC Inserting Rows with SQLBulkOperations Trace File Types of Descriptors Dynamic Tracing Unicode Function Arguments Sending Long Data Comparing Bookmarks Updating Data with SQLSetPos Connecting to a Data Source or Driver Return Codes ODBC Connection Attributes Executing a Statement Asynchronous Execution (Notification Method) Connecting with SQLDriverConnect Hard-Coded SQL Statements Long Data and SQLSetPos and SQLBulkOperations Updating, Deleting, or Fetching by Bookmark Binding Parameters by Name (Named Parameters) Gateways Diagnostic Example Constructing Interoperable SQL Statements Consistency Check ODBC Dynamic Cursors Generic Applications Default Data Source Direct Execution ODBC Scrollable Cursor Types Prompting the User for Connection Information Updating Rows in the Rowset with SQLSetPos Setting Descriptor Fields Uses of Catalog Data Transaction Support Vertical Applications Retrieving Data Type Information with SQLGetTypeInfo Types of Applications Data Type Conversions Header Record Escape Sequences in ODBC Multithreading Parameter Markers in Procedure Calls Bookmark Types Role of the Driver Updating Rows by Bookmark with SQLBulkOperations Allocating a Connection Handle ODBC C Data Types in ODBC Auto-Commit Mode Allocating and Freeing Descriptors Using Scrollable Cursors Executing Catalog Functions Binding Columns Scrolling and Fetching Rows (ODBC) Datetime Data Type Changes SQLDescribeCol and SQLColAttribute Retrieving the Values in Descriptor Fields Is ODBC the Answer? Outer Joins ODBC Fundamentals Retrieving Results (Advanced) Function Conformance Identifier Arguments Setting Up the Cursor Setting the Commit Mode Backward Compatibility and Standards Compliance Transactions ODBC Header Files Simulating Positioned Update and Delete Statements Connecting with SQLConnect Driver Manager Diagnostic Example Driver-Specific Data Types, Descriptor Types, Information Types, Diagnostic Types, and Attributes Unicode Data Core Interface Conformance Basic ODBC Application Steps New Features Supported Data Types SQL Data Types in ODBC DBMS-Based Driver Diagnostic Example Executing Procedures Multiple Active Statements and Connections Diagnostic Tools Multiple Results Retrieving Bookmarks Creating and Terminating Threads Ordinary Arguments Behavioral Changes Standards-Compliant Applications and Drivers Number of Rows Fetched and Status Implicitly Allocated Descriptors Mapping the Cursor Attributes1 Information Types Environment, Connection, and Statement Attributes Optimistic Concurrency Manual-Commit Mode Mixed Cursors Writing ODBC 3.x Drivers Arrays of Parameter Values ODBC in Windows Diagnostic Messages DDL Statements Commit Mode Copying Descriptors Obtaining Descriptor Handles Diagnostic Records Procedures ODBC Environment Handles Establishing a Connection Asynchronous Execution (Polling Method) Events Generated by the ODBC Driver Manager Writing an Interoperable Application Allocating and Freeing Buffers Column-Wise Binding Types of Drivers Value List Arguments Catalog and Schema Usage Using Length and Indicator Values Calling SQLSetPos Step 1: Connect to the Data Source Disconnecting from a Data Source or Driver Block Cursors, Scrollable Cursors, and Backward Compatibility for ODBC 3.x Applications Catalog Functions Committing and Rolling Back Transactions When to Use Procedures Role of the Driver Manager Retrieving Output Parameters Using SQLGetData Unicode Applications SQL Statements Tracing Step 4a: Fetch the Results Driver Manager's Role in the Connection Process Allocating the Environment Handle Descriptor Handles Batches of SQL Statements Updating Data with SQLBulkOperations Concurrency Control Binding Parameters ODBC Diagnostic Handling Rules Data Types in ODBC Tables and Views Quoted Identifiers Data Buffer Length Connection Strings Affected ODBC Components How is Metadata Used? Cursor Characteristics and Cursor Type Version Number SQLSTATE Mappings SQL Server Browsing Example Errors and Batches Result Set Metadata Getting Long Data Connecting with SQLBrowseConnect Descriptor Field Conformance Step 6: Disconnect from the Data Source Types of Changes Programming Considerations Visual Studio Analyzer Statement Handles Setting the Transaction Isolation Level Duplicated Features Rowset Size Catalog Position Deferred Fields Trace DLL Using Arrays of Parameters Considering Database Features to Use Escape Sequences Statement Parameters Data Buffer Type Diagnostic Handling Examples Bound Descriptor Records Procedure Parameters Driver-Aware Connection Pooling Effect of Transactions on Cursors and Prepared Statements UPDATE, DELETE, and INSERT Statements Row-Wise Binding Using SQLGetDiagRec and SQLGetDiagField Catalog Functions in ODBC Closing the Cursor Choosing an SQL Grammar Length of the Product Cycle Allocating a Statement Handle ODBC Statement Attributes Binding Result Set Columns Row Status Array Status Records Was a Result Set Created? Enabling Tracing Testing Interoperable Applications Scrolling by Bookmark Record Count Concurrency Types Deleting Rows by Bookmark with SQLBulkOperations Diagnostics Interoperability Buffers Enabling Visual Studio Analyzer NOT NULL in CREATE TABLE Statements Batch Processing Relative and Absolute Scrolling Calling SQLGetDiagField Unicode Drivers Interoperability of SQL Statements Step 4b: Fetch the Row Count Character Data and C Strings Data Returned by Catalog Functions Getting and Setting Descriptor Fields Translation DLLs Argument Value Checks Driver-Specific Connection Information Determining Cursor Capabilities SQL Conformance Levels Transaction Isolation Attribute Conformance The ODBC Cursor Library Using Concise Functions Freeing Descriptors Deleting Rows in the Rowset with SQLSetPos Step 5: Commit the Transaction Parameter Binding Offsets ODBC SQL Grammar Connecting Using File Data Sources Result-Generating and Result-Free Statements Level 2 Interface Conformance Transactions in ODBC ODBC Scrollable Cursors Interface Conformance Levels Date, Time, and Timestamp Literals Commit and Rollback Behavior Using Block Cursors Literal Prefixes and Suffixes ODBC Static Cursors Data Length, Buffer Length, and Truncation Application and Driver Compatibility Determining the Target DBMSs and Drivers Step 2: Initialize the Application Binding Columns for Use with Block Cursors SQL Type Identifiers Choosing a Level of Interoperability Determining the Number of Affected Rows Initialization of Descriptor Fields Type Identifiers Bookmarks (ODBC) Pattern Value Arguments Block Cursors Writing ODBC 3.x Applications CString Class LIKE Predicate Escape Character Using SQLBindCol Fetching a Row of Data Procedure Calls Serializability Setting Parameter Values Step 3: Build and Execute an SQL Statement SQLGetData and Block Cursors Connection Handles Implementing SQLGetDiagRec and SQLGetDiagField Describing Parameters Automatic Population of the IPD Unicode Scalar Function Calls Choosing a Data Source or Driver SQL Statements Entered by the User Transaction Support in DBMSs Features to Watch For Fetching Rows with SQLBulkOperations Positioned Update and Delete Statements Sequence of Status Records Developing Applications Transaction Isolation Levels General Error Checks Cursors Executing Statements ODBC Declaring the Application's ODBC Version SQL_NO_DATA State Transition Checks Using Data Buffers Alignment Compatibility Matrix Updating Data Overview File-Based Driver Diagnostic Example Retrieving Results (Basic) Cursor Library Operations Fetching Data Binding Arrays of Parameters Deferred Buffers Keyset-Driven Cursors