/* * Author: Leng_que * Date: 2009年11月15日 * E-mail: leng_que@yahoo.com.cn * Description: 直接使用ODBC提供的API函数来查出数据库的指定表内的所有内容。 */ #include <windows.h> #include <stdio.h> #include <sqlext.h> void ODBC_API_SAMPLE() { unsigned char DSN[]="L"; //数据源名称 unsigned char Name[]=""; //连接该数据源所需的用户名 unsigned char Pass[]=""; //对应以上用户名的密码 unsigned char Sql[] = "select * from L"; //SQL查表语句,查出表L的所有内容。 int n=0; long len=0; char** result=NULL; SQLSMALLINT Col_num=0; HENV env=NULL; HDBC conn=NULL; HSTMT stmt=NULL; if ( SQL_SUCCESS == SQLAllocEnv(&env) ) { if ( SQL_SUCCESS == SQLAllocConnect(env, &conn) ) { if ( SQL_SUCCESS == SQLConnect(conn, DSN, SQL_NTS, Name, SQL_NTS, Pass, SQL_NTS) ) { if ( SQL_SUCCESS == SQLAllocStmt(conn, &stmt) ) { if ( SQL_SUCCESS == SQLExecDirect(stmt, Sql, SQL_NTS) ) { if ( SQL_SUCCESS == SQLNumResultCols(stmt, &Col_num) ) { result = new char*[Col_num]; for ( n=0; n<Col_num; n++ ) { result[n] = new char[256]; if ( SQL_SUCCESS != SQLBindCol(stmt, n+1, SQL_C_CHAR, result[n], 256, &len) ) { goto END; } } while ( SQL_SUCCESS == SQLFetch(stmt) ) { for ( n=0; n<Col_num; ++n) { printf("%-6s ", result[n]); } printf("/r/n"); } for ( n=0; n<Col_num; n++ ) { delete[] result[n]; } delete[] result; } } } } } } END: if ( stmt != NULL ) { SQLFreeStmt(stmt, SQL_DROP); } if ( conn != NULL ) { SQLDisconnect(conn); SQLFreeConnect(conn); } if ( env != NULL ) { SQLFreeEnv(env); } } int main(void) { ODBC_API_SAMPLE(); return 0; }