Re: Accessing Database from c++
This is a multi-part message in MIME format.
--------------040201080200090303070606
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
I can provide you a little example ... not in C++ but in C .... you can
modify it and reuse in C++ code.... the only problem is that this
example make an oracle connection... but it should be quite the same...
only the string should change
bye
Pier Paolo
Wallace ha scritto:
Hai All,
Can anyone suggest or provide me sample code for making ODBC
connection and executing simple queries from c++. I am using sql server
2000. Also please tell what are the header files to be included. I
created a DSN and now I need to make connection with that DSN and
execute query from my code.
Thanks in advance..
Please help!!!! Looking forward for the response.
--------------040201080200090303070606
Content-Type: text/plain;
name="sqlmine.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="sqlmine.c"
#include <stdio.h>
#include "sqlmine.h"
struct data {
char nome[1024];
int nomelen;
SQL_TIMESTAMP_STRUCT ora;
int oralen;
} data1;
void usa(void *altro)
{
printf("nome %s data creazione ",data1.nome);
if (data1.oralen!=0)
printf("%d-%d-%d:%d:%d:%d\n",data1.ora.year,data1.ora.month,data1.ora.day,data1.ora.hour,data1.ora.minute,data1.ora.second);
}
SQLRETURN sqltrybind(SQLHANDLE *sqlstmt)
{
int res;
res= SQLBindCol(sqlstmt,
1,
SQL_C_CHAR,
&(data1.nome),
1024,
&data1.nomelen);
res=res+SQLBindCol(sqlstmt,
2,
SQL_C_TYPE_TIMESTAMP,
&(data1.ora),
1024,
&data1.oralen);
return res;
}
int sqlconnect(char *server,char *user,char *pwd)
{
int res;
if (res=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&sqlenv)!=SQL_SUCCESS) printf("Errore in allocEnv\n");
if (res=res*SQLSetEnvAttr( sqlenv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER)!=SQL_SUCCESS) printf("Errore in SQLATTREnv\n");
if (res=res*SQLAllocHandle(SQL_HANDLE_DBC,sqlenv,&sqlconn) != SQL_SUCCESS)
{
printf("Errore in allocConn %d\n",res);
}
if (res=res*SQLConnect(sqlconn,server,strlen(server),user,strlen(user),pwd,strlen(pwd))!=SQL_SUCCESS) printf("Errore in Connessione\n");
return res;
}
/* Esegue Select */
void sqlselect(char *select, sqlbind sqlb,void *altro,usedata used)
{
int res;
SQLHANDLE sqlstmt;
res=SQLAllocHandle(SQL_HANDLE_STMT,sqlconn,&sqlstmt);
if (res==SQL_SUCCESS) printf("Errore in creazione Handle Statement\n");
res=SQLPrepare(sqlstmt,select,strlen(select));
if (res==SQL_SUCCESS) printf("Errore in creazione SQLPrepare\n");
sqlb(sqlstmt);
SQLExecute(sqlstmt);
while (SQLFetch(sqlstmt)==SQL_SUCCESS)
{
used(altro);
}
SQLFreeHandle(SQL_HANDLE_STMT,sqlstmt);
}
void esegui()
{
sqlconnect("TEST","SYSTEM","MANAGER");
sqlselect("select object_name,created from user_objects",sqltrybind,NULL,usa);
sqlDisconnect();
}
/* Disconnect */
void sqlDisconnect()
{
SQLDisconnect(sqlconn);
SQLFreeHandle(SQL_HANDLE_DBC,sqlconn);
SQLFreeHandle(SQL_HANDLE_DBC,sqlenv);
}
--------------040201080200090303070606
Content-Type: text/plain;
name="sqlmine.h"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="sqlmine.h"
#include <sql.h>
#include <sqlext.h>
typedef SQLRETURN (*sqlbind)(SQLHANDLE *sqlstmt);
typedef void (*usedata)(void *altro);
SQLHANDLE sqlenv;
SQLHANDLE sqlconn;
int sqlconnect(char *server,char *user,char *pwd);
void sqlDisconnect();
void sqlselect(char *select, sqlbind sqlb,void *altro,usedata used);
--------------040201080200090303070606
Content-Type: text/plain;
name="common.h"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="common.h"
#include <windows.h>
#include <string.h>
#include <io.h>
#include <stdio.h>
#include <fcntl.h>
#include <commctrl.h>
HINSTANCE hinstp;
void startDebug();
int leggi(HWND hwnd,int obj,char *buffer,int size);
char username[256];
char datasource[256];
char pwd[256];
--------------040201080200090303070606
Content-Type: text/plain;
name="common.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="common.c"
#include "common.h"
void startDebug()
{
int hCrt,hCrti,hCrte;
FILE *hf,*hfi,*hfe;
AllocConsole();
hCrt = _open_osfhandle((long)GetStdHandle ( STD_OUTPUT_HANDLE),_O_TEXT );
hf = fdopen( hCrt, "w" );
*stdout = *hf;
setvbuf( stdout, NULL, _IONBF, 0 );
hCrti = _open_osfhandle((long) GetStdHandle ( STD_INPUT_HANDLE),_O_TEXT );
hfi = fdopen( hCrti, "r" );
*stdin = *hfi;
setvbuf( stdin, NULL, _IONBF, 0 );
hCrte = _open_osfhandle((long)GetStdHandle ( STD_OUTPUT_HANDLE),_O_TEXT );
hfe = fdopen( hCrte, "w" );
*stderr = *hfe;
setvbuf( stderr, NULL, _IONBF, 0 );
}
int leggi(HWND hwnd,int obj,char *buffer,int size)
{
memset(buffer,0,size);
if (GetDlgItemText(hwnd, obj, buffer, size)) {
printf("%s\n",buffer);
return 1;
}
return 0;
}
--------------040201080200090303070606--