Executing a query

If you want to execute a query you will need to specify a handle (`SQL_HANDLE_STMT`) for a SQL-statement. In order to get one you have to allocate one with `SQLAllocHandle`.

Then you have to think about the SQL statement you want to execute. As I mentioned in the introduction I assume that we have a table `tkeyuser` which contains the following data:

iduser | dtname | dtmaxSize
--- | --- | ---
1 | Christa | 10000
2 | Nicole | 9000

In this example, we want to execute a query which returns all the rows for the fields `iduser` and `dtname` in this table ordered by `iduser`. So the SQL statement would be:

`SELECT iduser,dtname FROM tkeydata ORDER BY iduser`

If you execute this statement you would get two rows each with two columns of data. This data has to be stored somewhere so that your programm can actually use it, so you need to define a variable for each of the columns. So you need to bind a column to variable in your program. Binding a variable automatically stores the data of the column in the variable when you retrieve a result row from the connection. It is important that your variables match the type of the column in the table within the database.

So we need to bin column #1 to a variable of type `SQLINTEGER` and the second column to a variable of type `char`. This is done by `SQLBindCol`. Therefore we add the variables:

`SQLHSTMT V_OD_hstmt; // Handle for a statement
SQLINTEGER V_OD_err,V_OD_id;
char V_OD_buffer[200];`

Now we can bind the variables:

`

    SQLBindCol(V_OD_hstmt,1,SQL_C_CHAR, &V_OD_buffer,200,&V_OD_err);
    SQLBindCol(V_OD_hstmt,2,SQL_C_ULONG,&V_OD_id,sizeof(V_OD_id),&V_OD_err);

`

Yes you should check for the return code of the function call. I'm to lazy to code it here once again :(

Now we can execute the query by calling `SQLExecDirect`: `

     V_OD_erg=SQLExecDirect(V_OD_hstmt,
                 "SELECT dtname,iduser FROM tkeyuser order by iduser",SQL_NTS);
     if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))
        {
         printf("Error Select %d\n",V_OD_erg);
         SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1, V_OD_stat, &V_OD_err,
    	               V_OD_msg,100,&V_OD_mlen);
         printf("%s (%d)\n",V_OD_msg,V_OD_err);
         SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
         SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt);
         SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
         exit(0);
        }

`