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 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?