c++ 连接MySql数据库并执行插入,查询数据测试代码

时间:2022-12-23 13:12:54
#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);
}




c++ 连接MySql数据库并执行插入,查询数据测试代码