#include <stdio.h> #include <stdlib.h> #include <string.h> #include <Windows.h> #include <sql.h> #include <sqlext.h> #include <Sqltypes.h> #include "iostream" using namespace std; /* 检测返回代码是否为成功标志,当为成功标志返回TRUE,否则返回FALSE */ #define RC_SUCCESSFUL(rc) ((rc) == SQL_SUCCESS || (rc) == SQL_SUCCESS_WITH_INFO) /* 检测返回代码是否为失败标志,当为失败标志返回TRUE,否则返回FALSE */ #define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc))) HENV henv; /* 环境句柄 */ HDBC hdbc; /* 连接句柄 */ HSTMT hsmt; /* 语句句柄 */ SQLRETURN sret; /* 返回代码 */ char szcode[6]; /* 厂商编号 */ long cbcode = 0; char szname[21]; /* 厂商名 */ long cbname = 0; char szasset[13]; /* 资产总值 */ long cbasset = 0; char szaddress[11];/* 厂商地址 */ long cbaddress = 0; void main(void) { /* 申请一个环境句柄 */ SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv); /* 设置环境句柄的ODBC版本 */ SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); /* 申请一个连接句柄 */ SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); //SQLConnect(hdbc, (SQLCHAR *)"DM4", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS, (SQLCHAR *)"SYSDBA", SQL_NTS); SQLConnect(hdbc,(SQLCHAR *)"handgame",SQL_NTS,(SQLCHAR *)"root",SQL_NTS,(SQLCHAR *)"handgame",SQL_NTS); /* 申请一个语句句柄 */ SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hsmt); /* 立即执行查询厂商登记表的语句 */ SQLExecDirect(hsmt, (SQLCHAR *)"SELECT nickname, charguid, exp, platformgold FROM t_char where account = 'ii21';", SQL_NTS); /* 绑定数据缓冲区 */ SQLBindCol(hsmt, 1, SQL_C_CHAR, szcode, sizeof(szcode), &cbcode); SQLBindCol(hsmt, 2, SQL_C_CHAR, szname, sizeof(szname), &cbname); SQLBindCol(hsmt, 3, SQL_C_CHAR, szasset, sizeof(szasset), &cbasset); SQLBindCol(hsmt, 4, SQL_C_CHAR, szaddress, sizeof(szaddress), &cbaddress); /* 取得数据并且打印数据 */ printf("厂商编号 厂商名 资产总值 厂商地址/n"); for (;;) { sret = SQLFetchScroll(hsmt, SQL_FETCH_NEXT, 0); if (sret == SQL_NO_DATA_FOUND) break; printf("%s %s %s %s/n", szcode, szname, szasset, szaddress); } /* 释放语句句柄 */ SQLFreeHandle(SQL_HANDLE_STMT, hsmt); /* 断开与数据源之间的连接 */ SQLDisconnect(hdbc); /* 释放连接句柄 */ SQLFreeHandle(SQL_HANDLE_DBC, hdbc); /* 释放环境句柄 */ SQLFreeHandle(SQL_HANDLE_ENV, henv); }