#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include <sql.h>//添加的代码
#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;} //添加的代码
/*
Template designed by RuPeng.com. Please visit http://www.rupeng.com for more information
如鹏网(http://www.rupeng.com)大学生计算机学习社区,提供大量免费视频学习教程,提供个性化一对一学习指导
*/
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:
        {
            DBTest(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 DBTest(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=root;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);
     //SQL_NTStellingthefunctionthepreviousparameterisNull-Terminated String,
     //pleasealculatethestringlengthforme
     result=SQLPrepare(hstmt,(SQLCHAR*)"insert into T_Person(FAge,FName) values(20,'kider')",SQL_NTS);
     CHECKDBSTMTERROR(hwnd,result,hstmt);
     result=SQLExecute(hstmt);
     CHECKDBSTMTERROR(hwnd,result,hstmt);
     SQLFreeStmt(hstmt,SQL_CLOSE);
     SQLDisconnect(hdbc);
     SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
     SQLFreeHandle(SQL_HANDLE_ENV,henv);
     MessageBox(hwnd,TEXT("执行成功"),TEXT("标题"),MB_OK);
}