C语言ODBC连接MySQL数据库制作简易用户登录系统

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("数据库执行错误"),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];
//分配环境句柄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_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];
//分配环境句柄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);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);}


2、数据库及数据表如下:




3、注意在编译的时候,在工程设置中添加连接库“odbc32.lib odbccp32.lib”。


4、运行效果如下:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于交通创新,这五大智慧城市做了啥?

来源&#xff1a;资本实验室在现代城市中&#xff0c;交通的可达性和运输效率是衡量城市运营水平的重要指标。而随着城市人口越来越多&#xff0c;城市规模不断变大&#xff0c;如何打造高效、舒适、快速出行的交通系统已经成为城市管理机构面临的一大挑战。随着传感器成本的持…

应用程序利用ADO对象访问数据库

1、已创建MySQL数据库employeedb&#xff0c;数据库中有如下所示的employeetb表。 2、在使用ADO对象之前&#xff0c;必须在工程的Stdafx.h文件里用直接引入符号#import引入 ADO库文件&#xff0c;以使编译器能够正确编译。代码如下&#xff1a; #import "D:\Program Fil…

人工智能让育种“物美价廉”

预测二元化基因表达量的卷积神经网络模型建立来源&#xff1a;中国科学报自从作物被驯化以来&#xff0c;培育集抗性强、优质、高产等性状为一体的作物品种一直是育种家的梦想。DNA分子结构模型的发现推动了分子生物学的发展&#xff0c;让育种家们能够从基因和分子水平上解码作…

Socket编程应用——开发聊天软件

1、客户端应用程序开发 建立一个基于对话框的MFC应用程序&#xff0c;创建的时候记得勾选【Windows Sockets】&#xff0c;其 他的默认就行。 &#xff08;1&#xff09;、对话框如图所示&#xff1a; &#xff08;2&#xff09;代码如下&#xff1a; // ChatClientDlg.cpp …

MFC中给单文档程序添加背景图片

1、在OnDraw函数中修改如下&#xff1a; void CBitmapView::OnDraw(CDC* pDC) {CBitmapDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCBitmap bitmap; //位图类对象bitmap.LoadBitmap(IDB_BITMAP1); //从资源中装载入位图CDC dc…

详解|清华大学100页PPT:工业机器人技术详解

来源&#xff1a;清华大学未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#…

2019年,中国要推进这70个工程项目

来源&#xff1a;人民日报客户端摘要&#xff1a;近日&#xff0c;《关于2018年国民经济和社会发展计划执行情况与2019年国民经济和社会发展计划草案的报告》正式发布。报告详尽地对2019年我国经济社会的发展做出了安排。围绕基础设施建设、创新发展、社会民生、生态治理、文化…

判断101-200之间有多少个素数,并输出所有素数。

1、代码如下&#xff1a; // test.cpp : Defines the entry point for the console application. // /* 判断101-200之间有多少个素数&#xff0c;并输出所有素数。*/ #include "stdafx.h" #include <iostream> #include <cmath> using namespace std;in…

输入一个十进制数,转化为二进制

1、代码如下&#xff1a; // test.cpp : Defines the entry point for the console application. // /* 输入一个十进制数&#xff0c;转化为二进制。*/ #include "stdafx.h" #include <iostream> using namespace std;int main(int argc, char* argv[]) {cout…

超越“机器人三定律” 人工智能期待新伦理

来源&#xff1a;新华网人工智能的伦理原则近来备受关注。联合国教科文组织总干事阿祖莱在3月初举行的“推动人性化人工智能全球会议”上就表示&#xff0c;目前还没有适用于所有人工智能开发和应用的国际伦理规范框架。对于科幻作家阿西莫夫上世纪设计、防止机器人失控的著名“…

求5阶矩阵其对角线上所有元素之和

1、代码如下&#xff1a; // test.cpp : Defines the entry point for the console application. // /* 输入一个5*5的矩阵&#xff0c;然后输出其对角线上所有元素之和。 当求N阶矩阵其对角线上所有元素之和时&#xff0c;只要把以下程序中所有的5改成N,4改成N-1即可。*/ #inc…

DARPA“终身学习机器”项目取得重大进展

来源&#xff1a;DARPA网站2019年3月&#xff0c;美国防高级研究计划局&#xff08;DARPA&#xff09;“终身学习机器”&#xff08;L2M&#xff09;项目研究人员在《自然机器智能》杂志发表了其有关人工智能算法的研究结果&#xff0c;介绍了一种由类似动物肌腱驱动的人工智能…

《自然》,工程学突破!仿生物细胞群体机器人问世

来源&#xff1a;科技日报摘要&#xff1a;北京3月20日&#xff0c;英国《自然》杂志20日发表了一项工程学最新突破&#xff1a;美国科学家团队研发了一种能模拟生物细胞集体迁移的机器人&#xff0c;可实现移动、搬运物体及向光刺激移动。北京3月20日&#xff0c;英国《自然》…

白宫启动AI.GOV计划,呼吁各界携手共同推进AI发展

来源&#xff1a;网络大数据摘要&#xff1a;近日&#xff0c;白宫启动了 ai.gov 计划&#xff0c;列出了特朗普政府与美国联邦机构采取的一系列人工智能举措&#xff0c;如美国国立卫生研究院(NIH)利用 AI 展开的生物医学研究项目以及美国交通部近期发布的关于自动驾驶汽车的报…

Qt连接MySQL数据库

1、将MySQL安装目录下的libmysql.dll拷贝到Qt安装目录下的bin目录中。 2、准备数据库和数据表如下&#xff1a; 3、编写如下代码&#xff1a; #------------------------------------------------- # # Project created by QtCreator 2016-07-15T17:56:50 # #----------------…

边缘计算不再“边缘”

来源&#xff1a;中国科学报摘要&#xff1a;5G商用时代来临&#xff0c;数据量将更加巨大、复杂&#xff0c;对计算提出更高要求&#xff0c;同时也为发展人工智能、边缘计算带来了新机遇。5G商用时代来临&#xff0c;数据量将更加巨大、复杂&#xff0c;对计算提出更高要求&a…

Qt中修改应用程序和标题栏的图标

一、修改应用程序图标 1.新建一个my.txt文件&#xff0c;打开后在其中加一句 “IDI_ICON1 ICON DISCARDABLE "应用程 序图标.ico"”。&#xff08;“应用程序图标.ico”是要添加的图片名&#xff0c;图片格式一定要是.ico), 然后保存并退出&#xff0c;将文件格式改为…

人类“第六感”首次被证实,研究发现人脑具有磁场感应能力

新证据表明&#xff0c;人类磁感可以让大脑感应到地球磁场来源&#xff1a;神经科技摘要&#xff1a;科学界已经知道鸟类可以利用地磁场进行导航&#xff0c;除此之外&#xff0c;科学家在自然界许多物种中都发现了磁感应能力&#xff0c;生物的磁感受能力也一直在业内被称作生…

用S-函数编写Simulink中的正弦模块

1、用S-函数实现一个正弦波信号源。要求其幅度、频率和初始相位参数可由外部设置&#xff0c;并将这个信号源进行封装。 S-函数程序代码如下&#xff1a; function [sys,x0,str,ts] ch2example17Sfun(t,x,u,flag,Amp,Freq,Phase) % 正弦波信号源 switch flag, case 0 …

2019计算与系统神经科学大会Cosyne 前沿研究汇总

来源&#xff1a;混沌巡洋舰摘要&#xff1a;计算神经科学是一门超级跨学科的新兴学科&#xff0c;几乎综合信息科学&#xff0c;物理学&#xff0c; 数学&#xff0c;生物学&#xff0c;认知心理学等众多领域的最新成果。关注的是神经系统的可塑性与记忆&#xff0c;抑制神经元…