#include #include #include #include #include using namespace std; int main() { HENV hEnv; HDBC hDbc; RETCODE rc; int iOut; char strOut[256]; char szDSN[256] = "driver={Microsoft Access Driver (*.mdb)};dbq=[c:\\db1.mdb];"; //dsn samples: //"driver={Microsoft Access Driver (*.mdb)};dbq=[f:\\db1.mdb];" //"driver={SQL Server};pwd={password there};Server={server name};Database={dbname there}" //driver names for different databases: //{SQL Server} //{Microsoft ODBC for Oracle} //{Oracle in oracle9} //{Microsoft Access Driver (*.mdb)} //{MySQL ODBC 3.51 Driver} char* szSql = "select * from table1"; rc = SQLAllocEnv(&hEnv); rc = SQLAllocConnect(hEnv, &hDbc); rc = SQLDriverConnect(hDbc, NULL, (unsigned char*)szDSN, SQL_NTS, (unsigned char*)strOut, 255, (SQLSMALLINT*)&iOut, SQL_DRIVER_NOPROMPT); { int ival; char chval[128]; int ret1; int ret2; HSTMT hStmt; rc = SQLAllocStmt(hDbc,&hStmt); rc = SQLPrepare(hStmt,(unsigned char*)szSql, SQL_NTS);//1 //rc = SQLBindCol(hStmt, tab_column, tr_type, tr_value, tr_len, len_or_ind); rc = SQLBindCol(hStmt, 1, SQL_C_ULONG, &ival, 4, (SQLINTEGER*)& ret1); rc = SQLBindCol(hStmt, 2, SQL_C_CHAR, chval, 128, (SQLINTEGER*)&ret2); rc = SQLExecute(hStmt); //2 //if you have queries like drop/create/many update... //instead of //1 //2 and //3 you could use //rc=SQLExecDirectA(hStmt,(unsigned char*)szSql,SQL_NTS); cout<< ">table:"<< endl; while(1) //3 { rc = SQLFetch(hStmt); if(rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO)break; cout<< "{"<< ival<<"}{"<< chval<< "}"<< endl; } rc=SQLFreeStmt(hStmt, SQL_DROP); } rc = SQLDisconnect(hDbc); rc = SQLFreeEnv(hEnv); return 0; }