MFC应用连接数据库mysql后的增删改查(VS2019)

啊,上一篇说完怎么连接数据库后;
来实现以如何用MFC对数据库mysql进行增删改查;
在这里插入图片描述
首先打开你的数据库选择新建数据库并且插入表;
在这里插入图片描述
我插入的表名是stu;数据库这边就完事了;

首先创建一个基于对话框的应用程序;
然后进行布局;
在这里插入图片描述

为了方便叙述
我直接偷懒这么布局了;

一,插入功能

在Dialog文件夹中选择插入Dialog;
再对插入的对话框进行布局;
在这里插入图片描述
然后我们给这个对话框添加类;(我的类名是add)
再给这编辑框添加变量;我添加的变量名为na和ch;变量选择值变量;
在这里插入图片描述
然后实现出点击添加按钮会弹出这个模态对话框的功能;
双击添加按钮;
加上头文件
写上代码;

	add dlg;
	dlg.DoModal();

不理解可以看之前的文章;

然后我们要做到这个插入的对话框的功能的话;
在这里插入图片描述
我们再双击插入的对话框中确定这个按钮进入事件处理程序;
在最上面加头文件;

#include "winsock.h"
#include "mysql.h"

然后开始写事件处理程序;
首先要获取两个编辑框的内容:

	GetDlgItem(IDC_EDIT1)->GetWindowText(na);
	GetDlgItem(IDC_EDIT2)->GetWindowText(ch);

能理解吧,黑色的是编辑框ID和变量名;
然后定义连接;

	const char name[] = "root";
	const char pswd[] = "root";
	const char host[] = "localhost";
	const char table[] = "stu";
	unsigned int port = 3306;
	MYSQL_RES* res;
	MYSQL_ROW row;
	MYSQL mysqlCon;
	mysql_init(&mysqlCon);

第一行和第二行是你的数据库用户名和密码;
第三行是固定的主机名或IP地址;
第四行是数据库名;
第五行是端口号,也是固定的;
后面的直接写上就行;
然后判断数据库连接是否成功;

mysql_init(&mysqlCon);
	if (!mysql_real_connect(&mysqlCon, host, name, pswd, table, port, NULL, 0))
	{
		AfxMessageBox(_T("访问数据库失败!"));
	}
	else
	{
		mysql_query(&mysqlCon, "SET USER GBK"); //设置字符集
		AfxMessageBox(_T("访问数据库成功!"));
	}

这样准备工作就做好了;
然后我们把编辑框的值拿出来;

	char* x = (char*)na.GetBuffer();
	char* y = (char*)ch.GetBuffer();

有这两个值后,我们就开始把他写入数据库中

	char insert[1000];
	sprintf_s(insert, "insert into stu(name, sorce ) values (\'%s\', \'%s\')", x, y);

绿色的是sql语句,差不多能理解就好;
最后我们再判断一下是否插入成功;

	if (mysql_query(&mysqlCon, insert) == 0)
	{
		AfxMessageBox(_T("添加成功!"));
		CDialog::OnCancel();

	}
	else {
		AfxMessageBox(_T("添加失败!"));

	}

这样的话添加功能就完成了;

二,删除功能;
开始的步骤全都一样;
然后我的布局是这样;
在这里插入图片描述
添加类(我的是del)添加变量(我的是na2);
中间的步骤不重复了;
直接双击这个确定按钮进入事件处理程序;
其实过程还是一样的;
在这里插入图片描述
不过我没有判断是否这个学生是否存在之类的功能(因为方便哈)
第一步先把获取的值改掉吧(改成na2);

GetDlgItem(IDC_EDIT1)->GetWindowText(na2)

应该是na2了吧;
再改一个sql语句;

sprintf_s(insert, "delete from stu  WHERE name='%s'", x);

其余和上面全一样;
直接就复制粘贴改这两地方个就完全OK;
在这里插入图片描述
三,修改功能

修改也是一样,就改这两个地方其他不用变;
修改的sql语句;

sprintf_s(insert, "UPDATE stu SET sorcer='%s' WHERE name='%s'",x, y);

四,查询功能

查询的sql语句可能复杂一些;
先看下我的布局
在这里插入图片描述
给两个编辑框添加变量na3,box;
然后
我直接上代码吧;

CString select_sql_by_user;
	select_sql_by_user.Format(_T("select name,sorce from stu where name = \'%s\'"), na3);
	int ress = mysql_query(&mysqlCon, (char*)(LPCTSTR)select_sql_by_user);
	if (ress == 0) //检测查询成功
	{
		res = mysql_store_result(&mysqlCon);
		if (mysql_num_rows(res) == 0) //查询结果为空
		{
			AfxMessageBox(_T("学生不存在"));
		}
		else
		{
			row = mysql_fetch_row(res);
			box = TEXT("姓名:");
			box = box+row[0];
			box = box + TEXT("成绩:");
			box = box + row[1];
		}


	}
	else
	{
		AfxMessageBox(_T("访问失败!"));
	}
	UpdateData(FALSE);

如果前面的理解了,其实这个也不难理解,可以吧row看成一个数组,存放的就是数据库的信息;
然后就完全做完了这四个功能;
但也是最最最基本的功能,其余需要添加的,就要自己想办法添加了;
在这里插入图片描述
OK,结束;

猜你喜欢

转载自blog.csdn.net/weixin_46726346/article/details/106851760