#include "stdafx.h" #include <windows.h> #include <windowsx.h> #include <SQL.H>//连接库:odbc32.lib odbccp32.lib #include <SQLEXT.H> #include <SQLTYPES.H> #include "resource.h" #include "MainDlg.h" #define LOGIN_TIMEOUT 30 #define MAXBUFLEN 255 #define CHECKDBSTMTERROR(hwnd,result,hstmt) if(SQL_ERROR==result){ShowDBStmtError(hwnd,hstmt);return;} /* */ BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { return TRUE; } void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_OK: { Test(hwnd); } break; default: break; } } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); } void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle) { char pStatus[10], pMsg[101]; SQLSMALLINT SQLmsglen; char error[200] = {0}; SQLINTEGER SQLerr; long erg2 = SQLGetDiagRec(type, sqlHandle,1, (SQLCHAR *)pStatus,&SQLerr,(SQLCHAR *)pMsg,100,&SQLmsglen); wsprintf(error,"%s (%d)\n",pMsg,(int)SQLerr); MessageBox(hwnd,error,TEXT("数据库执行错误"),MB_ICONERROR|MB_OK); } void ShowDBConnError(HWND hwnd,SQLHDBC hdbc) { ShowDBError(hwnd,SQL_HANDLE_DBC,hdbc); } void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt) { ShowDBError(hwnd,SQL_HANDLE_STMT,hstmt); } void Test(HWND hwnd) { SQLHENV henv = NULL; SQLHDBC hdbc = NULL; SQLHSTMT hstmt = NULL; SQLRETURN result; SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=123456;DATABASE=test;CharSet=gbk;"; SQLCHAR ConnStrOut[MAXBUFLEN]; //分配环境句柄 result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //设置管理环境属性 result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); //分配连接句柄 result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); //设置连接属性 result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)LOGIN_TIMEOUT, 0); //连接数据库 result = SQLDriverConnect(hdbc,NULL, ConnStrIn,SQL_NTS, ConnStrOut,MAXBUFLEN, (SQLSMALLINT *)0,SQL_DRIVER_NOPROMPT); if(SQL_ERROR==result) { ShowDBConnError(hwnd,hdbc); return; } //初始化语句句柄 result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); //result = SQLPrepare(hstmt,(SQLCHAR*)"select id,name,age from student",SQL_NTS);//如果是查询 result = SQLPrepare(hstmt,(SQLCHAR*)"insert into student(id,name,age) values(3,'wanger',30)",SQL_NTS); CHECKDBSTMTERROR(hwnd,result,hstmt); result =SQLExecute(hstmt); CHECKDBSTMTERROR(hwnd,result,hstmt); //显示查询数据开始 /* SQLINTEGER cbsatid=SQL_NTS; TCHAR info[50]={0}; while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND) { SQLCHAR name[20]; SQLINTEGER id; SQLSMALLINT age; SQLGetData(hstmt,1,SQL_C_LONG,&id,sizeof(SQLINTEGER),&cbsatid); SQLGetData(hstmt,2,SQL_C_CHAR,name,20,&cbsatid); SQLGetData(hstmt,3,SQL_C_TINYINT,&age,sizeof(SQLSMALLINT),&cbsatid); wsprintf(info,"%i,%s,%i",id,name,age); MessageBox(NULL,info,"提示",MB_OK); } */ //显示查询数据结束 SQLFreeStmt(hstmt,SQL_CLOSE); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC,hdbc); SQLFreeHandle(SQL_HANDLE_ENV,henv); MessageBox(hwnd,TEXT("执行成功"),TEXT("标题"),MB_OK); }