purpose09 2019-11-19 18:49 采纳率: 14.3%
浏览 212

win32程序怎么连接数据库并验证正确性

###运行后虽然有界面出现,但是输入了用户名和密码后就卡住了一会,然后退出了,messagebox也没有显示,求大佬点拨,下面是代码:

#include <windows.h>
#include "resource.h"
//.......

//资源


BOOL REGISTEWIN(HINSTANCE hInstance,LPSTR lpClassName, WNDPROC wndProc);
void SHOWWND(HWND hwnd);
void MESSAGE();
void Link();
LRESULT CALLBACK MYPROC(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
LRESULT CALLBACK SCREEAN1PROC(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
LRESULT CALLBACK DialogProc1(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam);
BOOL Check(SQLHSTMT hStmt);

HWND hwndup;
HWND hwnd;
RETCODE retcode;
HINSTANCE hInstance;
SQLHENV henv = SQL_NULL_HENV;
SQLHDBC hdbc1 = SQL_NULL_HDBC;
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;
char users[255]={0};
char password[255]={0};




//winmain主程序
int WinMain(HINSTANCE hInstance,HINSTANCE hinstance,LPSTR lpCmdLine,int nShowCmd){
    char* name = "name";
    char* screen1 = "screen1";

    //创建对话框,并判断对话框是否注册成功
    HWND hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG2),GetDesktopWindow(),(DLGPROC)DialogProc1);
    if(!hdlg) MessageBox(hwnd,"error","error",MB_OK);
    SHOWWND(hdlg);

    //创建管理界面
    hwndup = CreateWindow(screen1,TEXT("图书管理界面"),WS_OVERLAPPEDWINDOW,500,100,500,700,NULL,LoadMenu(hInstance,MAKEINTRESOURCE(IDR_MENU1)),hInstance,NULL) ;

    MESSAGE();

    return 0;

}


//DialogProc1函数
LRESULT CALLBACK DialogProc1(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam){
    switch (msg)
    {
    case WM_INITDIALOG:
        return TRUE;
    case WM_COMMAND:
    {
        switch (LOWORD(wparam)) {
        case IDOK:
        {
            HWND h1=NULL;
            HWND h2=NULL;

            h1=GetDlgItem(hdlg,0x00009c40) ;
            h2=GetDlgItem(hdlg,0x00009c41) ;
            if(h1==NULL&&h2==NULL)
                printf("GetDlgItem fail!");
            //获得user和password
            SendMessage(h1,WM_GETTEXT,255,(LPARAM)users);
            SendMessage(h2,WM_GETTEXT,255,(LPARAM)password);
            printf("%s  %s\n",users,password);
//
//
//就是这里,,,,想通过数据库查找user和password
//
//
            if(Check(hdlg)==TRUE)
                MessageBox(hdlg,"error","账户或密码不正确",MB_OK);


            DestroyWindow(hdlg);
            hdlg = NULL;
            hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hwnd,(DLGPROC)DialogProc1);
            ShowWindow(hdlg,SW_SHOW);
        }
        break;
        case IDCANCEL:
        {
            //点击取消按钮关闭对话框,最后关闭窗口
            EndDialog(hdlg, IDCANCEL);
        }
        break;
        }
    }
    break;
    case WM_SYSCOMMAND:
    {
        if (wparam == SC_CLOSE) {
            EndDialog(hdlg,TRUE);
        }
    }
    break;
    }
    return (INT_PTR)FALSE;
}

//检查user和password函数
BOOL Check(SQLHSTMT hStmt)
    {
        Link();
        char * person1 = "select *from Login where users='";
        const char * person2 = "' and password=";
        strcat(person1,users);
        strcat(person1,person2);
        strcat(person1,password);
        SQLRETURN ret = SQLExecDirect(hStmt,(SQLCHAR*)person1,strlen(person1));
        if (ret == SQL_SUCCESS) return TRUE;
        else return FALSE;
    }


void MESSAGE(){
    MSG msg = {0};
    while(GetMessage(&msg,NULL,0,0)){
            TranslateMessage(&msg);
            DispatchMessage(&msg);//分发消息,将消息分发给回调函数,回调函数callback处理完后,返回给dispatchmessage函数,再继续进行消息循环
    }
}

void Link(){
    //
    UCHAR   szDSN[SQL_MAX_DSN_LENGTH+1] = "db_mrbm",//数据源名称
            szUID[MAXNAME] = "sa",
            szAuthStr[MAXNAME] = "0922";

    //1.连接数据源
        //1.环境句柄
    retcode = SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);
    retcode = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);

        //2.连接句柄
    retcode = SQLAllocHandle(SQL_HANDLE_DBC,henv, &hdbc1);
    retcode = SQLConnect(hdbc1, szDSN, 13, szUID, 2, szAuthStr,4);
    //判断连接是否成功
    if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO)){
        MessageBox(hwnd,"连接错误","error",MB_OK);
    }else{printf("连接!/n");}
//
}







  • 写回答

1条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制