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个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

3
64位win7 安装access2010(64位),WPS不能使用数据导入功能,提示未安装数据库引擎,求解决方法?
1
vs2017的win32控制台应用程序生成的预编译文件不是stdafx.h,而是pch.h?
1
lib文件不是有效的win32应用程序
3
求大神帮忙,WIN32 API或C# WINFORM如何进入加密Excel表内,读取数据?
0
win10系统中db2数据库已启动但在桌面底部未显示
2
网站服务器远程连接数据库失败
2
pywin32把窗体嵌入桌面 or 把程序嵌入桌面 or 把程序窗体嵌入壁纸
4
如何解决jupyter import不了任何库 会出现里面[WinError 193] %1 不是有效的 Win32 应用程序
2
Visual Studio属性管理器的【Debug|Win32】文件夹下没有【Microsoft.Cpp.Win32.user】为什么???
2
OSError: [WinError 193] %1 不是有效的 Win32 应用程序。
1
vs for mac能否连接到数据库
1
WinXP 32位系统运行程序提示“无法定位程序输入点ucrtbase.terminate于动态链接库api-ms-win-crt-runtime-|1-1-0.dll”上,如何解决?
2
win7 X64系统开发winform项目查询oracle数据库问题
1
pyqt5链接postgres数据库一直报Driver not loaded Driver not loaded
1
pycharm误删script文件,恢复后运行程序出现CreateProcess error=193, %1 不是有效的 Win32 应用程序
1
VS 2019 调试程序报错dll不是有效的win32应用程序
2
WIN32怎么通过连接数据库进行操作
1
win32怎么利用ODBC来实现检测用户名和密码
1
WIN32如何获得文本框内的内容