This tutorial show coding on how to connect with a database in C++.
This are actual guides:
Before I start just to introduce some SQL commands and stuff. For starter you had some back grounds on it.
And let’s start…
ODBC (Open Database Connectivity)
A standard interface for connecting from C++ to relational databases. It allows individual providers to implement and extend the standard with their own ODBC drivers.
Here are procedures or rather steps used in the industry in C++ coding for connecting to a database.
Okey, this are actual steps how-to connect to a database.
1. Include the Header Files.
# include statements at the beginning of your programs:
#include
#include
#include
2. Open a Connection to a Database.
Set the environment handle:
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hdlEnv);
Set ODBC Driver version:
SQLSetEnvAttr(hdlEnv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC30);
Set the connection handle:
SQLAllocHandle(SQL_HANDLE_DBC, hdlEnv, &hdlConn);
Connect to the database:
SQLConnect(hdlConn, (SQLCHAR*)dsnName,SQL_NTS,(SQLCHAR*)userID,SQL_NTS, (SQLCHAR*)passwd, SQL_NTS);
3. Choose Driver
4. Query the Database
Querying the database involves the following steps:
–Creating a Statement
SQLAllocHandle(SQL_HANDLE_STMT, hdlDbc, &hdlStmt);
It allocates the memory for the statement handle. The database handle obtained during connection phase is passed as the second argument.
– Executing a Query
SQLExecDirect(hdlStmt, stmt, SQL_NTS);
It executes the query, which is passed in as SQLCHAR* in the second argument.
5. Extract the Data out of the Executed Query.
SQLGetData(hStmt,colNum,type,retVal,buffLength,&cbData);
It extracts data from table as void* data and places it in retVal
colNum refers to the column number provided in the SELECT statement in SQLExecDirect()
Type is one of the standard ODBC data types
example: DT_STRING à for a string data type
DT_DOUBLE à for a double data type
buffLength is the estimated size of the expected data
cbData is the actual size of the data.
6. Traverse Through the Results
SQLFetch(hStmt);
Fetches the next record
hStmt is the statement handle obtained using SQLAllocHandle
If a record is available, It returns SQL_SUCCEEDED.
7. Close the Statement and the Connection
SQLFreeHandle(SQL_HANDLE_STMT, hdlStmt);
It closes and de-allocates the memory reserved for the statement handle
SQLFreeHandle(SQL_HANDLE_DBC, hdlConn);
It disconnects and de-allocates the memory reserved for the connection handle
SQLFreeHandle(SQL_HANDLE_ENV, hdlEnv);
It de-allocates the memory occupied by the environment handle
For further escalate the whole steps here a sample program.
//Header files:
#include <sql.h>
#include<sqltypes.h>
#include<sqlext.h>
…
….
//Declaration:
SQLHandle hdlEnv, hdlConn, hdlStmt, hdlDbc
char* stmt = “SELECT * from NutHead is the Table nameNutHead”; //SQL statement
//for example
name of your program or whatchar *dsnName = “COLLECTOR” ever…..
char* userID = “eXceed”;
char* passwd = “hole”;
char* retVal[256];
unsigned int cbData;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hdlEnv);
SQLSetEnvAttr(hdlEnv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC30);
SQLAllocHandle(SQL_HANDLE_DBC, hdlEnv, &hdlConn);
SQLConnect(hdlConn, (SQLCHAR*)dsnName,SQL_NTS,(SQLCHAR*)userID,SQL_NTS, (SQLCHAR*)passwd, SQL_NTS);
SQLAllocHandle(SQL_HANDLE_STMT, hdlDbc, &hdlStmt);
SQLExecDirect(hdlStmt, (SQLCHAR*)stmt, SQL_NTS);
//Initialize the database connection
while(SQLFetch(hdlStmt) == SQL_SUCCEEDED)
{
SQLGetData(hdlStmt,0,DT_STRING,retVal,256,&cbData);
std::cout << retVal << std::endl;
}
SQLFreeHandle(SQL_HANDLE_STMT, hdlStmt);
SQLFreeHandle(SQL_HANDLE_DBC, hdlConn);
SQLFreeHandle(SQL_HANDLE_ENV, hdlEnv); //End the connection
Hope it helps.


















Leave Your Comments Below