Attaching to a Database
Go Up to Connecting to Databases
After creating and initializing a database handle, and optionally setting up a DPB to specify connection parameters, use isc_attach_database()
to establish a connection to an existing database. Besides allocating system resources for the database connection, isc_attach_database
() also associates a specific database with a database handle for use in subsequent API calls that require a handle.
isc_attach_database()
expects six parameters:
- A pointer to an error status array, where attachment errors can be reported should they occur.
- The length, in bytes, of the database name for the database to open. If the database name includes a node name and path, these elements must be counted in the length argument.
- A string containing the name of the database to attach. The name can include a node name and path specification.
- A pointer to a previously declared and initialized database handle with which to associate the database to attach. All subsequent API calls use the handle to specify access to this database.
- The length, in bytes, of the DPB. If no DPB is passed, set this value to zero.
- A pointer to the DPB. If no DPB is passed, set this to NULL.
Each database attachment requires a separate call to isc_attach_database()
.
The following code establishes an attachment to the InterBase example database, employee.ib
, and specifies a DPB to use for the attachment:
#include <ibase.h> . . . isc_db_handle db1; char dpb_buffer[256], *dpb, *p; short dpb_length; char *str = "employee.ib"; ISC_STATUS status_vector[20]; . . . /* Set database handle to zero before attaching to a database. */ db1 = 0L; /* Initialize the DPB. */ dpb = dpb_buffer; *dpb++ = isc_dpb_version1; *dpb++ = isc_dpb_num_buffers; *dpb++ = 1; *dpb++ = 90; dpb_length = dpb - dpb_buffer; /* Attach to the database. */ isc_attach_database(status_vector, strlen(str), str, &db1, dpb_length, dbp_buffer); if (status_vector[0] == 1 && status_vector[1]){ error_exit(); } . . .
The following code illustrates how to attach to a database without passing a DPB:
#include <ibase.h> . . . isc_db_handle db1; char *str = "employee.ib"; ISC_STATUS status_vector[20]; . . . /* Set database handle to zero before attaching to a database. */ db1 = 0L; /* Attach to the database. */ isc_attach_database(status_vector, strlen(str), str, &db1, 0, NULL); if (status_vector[0] == 1 && status_vector[1]){ error_exit(); } . . .