C语言ODBC连接MySQL数据库制作简易用户登录系统
生活随笔
收集整理的這篇文章主要介紹了
C语言ODBC连接MySQL数据库制作简易用户登录系统
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、代碼如下:
#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;}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_BUTTON_SAVE:SaveToDataBase(hwnd);break;case IDC_BUTTON_LOGIN:Login(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("數(shù)據(jù)庫執(zhí)行錯誤"),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 SaveToDataBase(HWND hwnd) {SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=127.0.0.1;UID=root;PWD=226;DATABASE=userlogin;CharSet=gbk;";SQLCHAR ConnStrOut[MAXBUFLEN]; //分配環(huán)境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //設置管理環(huán)境屬性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); //連接數(shù)據(jù)庫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_NTS telling the function the previous parameter is Null-Terminated String, //please alculate the string length for meTCHAR userName[20];GetDlgItemText(hwnd,IDC_EDIT_USERNAME,userName,sizeof(userName)/sizeof(TCHAR));TCHAR password[20];GetDlgItemText(hwnd,IDC_EDIT_PASSWORD,password,sizeof(password)/sizeof(TCHAR));TCHAR sql[255];wsprintf(sql,"insert into T_user(FuserName,Fpassword) values('%s','%s')",userName,password);result = SQLPrepare(hstmt,(SQLCHAR*)sql,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); } void Login(HWND hwnd) {SQLHENV henv = NULL;SQLHDBC hdbc = NULL;SQLHSTMT hstmt = NULL;SQLRETURN result;SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=127.0.0.1;UID=root;PWD=226;DATABASE=userlogin;CharSet=gbk;";SQLCHAR ConnStrOut[MAXBUFLEN]; //分配環(huán)境句柄result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); //設置管理環(huán)境屬性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); //連接數(shù)據(jù)庫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);TCHAR inputUserName[20];GetDlgItemText(hwnd,IDC_EDIT_USERNAME,inputUserName,sizeof(inputUserName)/sizeof(TCHAR));TCHAR inputPassword[20];GetDlgItemText(hwnd,IDC_EDIT_PASSWORD,inputPassword,sizeof(inputPassword)/sizeof(TCHAR));TCHAR sql[255];ZeroMemory(sql,sizeof(sql)/sizeof(TCHAR));wsprintf(sql,"select Fpassword from T_user where FuserName=%s",inputUserName);result = SQLPrepare(hstmt,(SQLCHAR*)"select FuserName,Fpassword from T_user ",SQL_NTS);CHECKDBSTMTERROR(hwnd,result,hstmt);result =SQLExecute(hstmt);CHECKDBSTMTERROR(hwnd,result,hstmt);SQLINTEGER cbsatid=SQL_NTS;BOOL found=FALSE;while (SQLFetch(hstmt)!=SQL_NO_DATA_FOUND){TCHAR password[20];SQLGetData(hstmt,2,SQL_C_CHAR,password,sizeof(password)/sizeof(TCHAR),&cbsatid);if(0==lstrcmp(inputPassword,password)){MessageBox(hwnd,TEXT("輸入正確,登錄成功"),TEXT("提示"),MB_OK);found=TRUE;break;}}if(FALSE==found){MessageBox(hwnd,TEXT("輸入錯誤"),TEXT("報錯"),MB_OK| MB_ICONERROR); }SQLFreeStmt(hstmt,SQL_CLOSE);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}
3、注意在編譯的時候,在工程設置中添加連接庫“odbc32.lib odbccp32.lib”。
4、運行效果如下:
總結(jié)
以上是生活随笔為你收集整理的C语言ODBC连接MySQL数据库制作简易用户登录系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CPNDet:Corner Propos
- 下一篇: Django 应用分库,数据迁移成功,数