本次试验是本来是一次简单的sql做界面的任务,本来我想的是从网上找一份java的代码,直接搞出来就结束了,但是我曾在大一下整过一段时间mfc连接mysql,让我决定整一个mfc工程,诚然mfc工程基本上没人用(相比于java),所以很多内容找不到都是自己蒙出来的,写这篇博客留作纪念(备用)。

工具

本次使用的工具为Visual Studio2017和Microsoft sql server2019

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_数据库

准备工作

建立MFC并设置基础选项

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_数据库_02


c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_c 连接mysql数据库增删改查代码_03


c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_microsoft_04


对sql的创建

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_数据库_05


新建查询

CREATE TABLE Student (
Sno char ( 7 ) PRIMARY KEY,
Sname char ( 10 ) NOT NULL,
Ssex char (2),
Sage tinyint ,
Sdept char (20)
)
CREATE TABLE Course (
Cno char(10) NOT NULL,
Cname char(20) NOT NULL,
Ccredit tinyint ,
Semester tinyint,
PRIMARY KEY(Cno)
)
CREATE TABLE SC
(
Sno char(7) NOT NULL,
Cno char(10) NOT NULL,
Grade tinyint,
XKLB char(4) ,
PRIMARY KEY ( Sno, Cno )
)

实现数据库的连接和断开链接

通过ctrl+shift+E出现资源视图,找到其中的对话框窗口,方便操作。

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_c++_06


通过点击“确定”和“取消”实现对OnBnClickedOk和OnBnClickedCancel的定义

因为是ADO实现

所以需要在stdaf.h中添加sock头文件并导入动态库

// ADO动态库需要使用sock头文件
#include <afxsock.h>
//下面这句是导入ADO动态库,这是必须操作的一步
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

我这里出现了个问题,第二条语句报错了

import无法打开源文件 …/msado15.tlh (msado15.dll)

这里可以通过添加数据库的头文件来解决

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_microsoft_07


在MFCApplication.cpp中

BOOL CMFCApplicationApp::InitInstance()添加实现socket的接口代码

if (!AfxSocketInit())
	{
		return FALSE;
}
	CoInitialize(NULL); //使用ADO组件时多线程加载出错需要CoInitialize

其余的就是在MFCApplicationDlg.cpp中操作了
添加ADO接口的指针

//ADO添加相关代码@4
_ConnectionPtr m_pConnection; //ADO接口指针
//ADO添加相关代码

这里需要穿插一部分内容,有关于如何对窗口进行操作的
这里是关于button
button的属性主要是caption,和(Name) ,ID,caption是按钮上显示的内容,后两者则是补全代码时会产生的属性,两者最好保持一致,添加代码后,通过双击,即可在cpp中补全代码。

回归正题

对话框是一个类,我们通过这个类和上面建立的ADO接口指针,实现对数据库的操作。

接下来我们需要实例化新建数据库,需要在现有Dlg下创建一个函数,这里我们需要使用到类向导

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_mfc_08

//ADO添加相关代码@5
//新建opendatabase以实现对数据库的操作
bool CMFCApplicationDlg::OpenDatabase()
{
	// TODO: 在此处添加实现代码.
	CString connString = "Provider=SQLNCLI11;Data Source=.;Integrated Security=SSPI;Initial Catalog=mfc_work";
	//打开数据库
	HRESULT hr;
	try
	{
		hr = m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
		if (SUCCEEDED(hr))
		{
			//连接数据库
			hr = m_pConnection->Open((LPSTR)(LPCTSTR)connString, "", "", adModeUnknown);

		}
	}
	catch (_com_error e)///捕捉异常
	{
		CString errormessage;
		errormessage.Format("连接数据库失败!\r\n错误信息:%s", e.ErrorMessage());
		//		AfxMessageBox(errormessage);///显示错误信息
		return false;
	}
	return true;

}
//ADO添加相关代码

这里我创建遇到了一个小问题,就是我的函数并没有在"MFCApplicationDlg"中声明,但通过程序可以实现在程序中的代码补全。
找到问题后会解决

//ADO添加相关代码@6
bool CMFCApplicationDlg::CloseDatabase()
{
	// TODO: 在此处添加实现代码.
	try
	{
		HRESULT hr;
		hr = m_pConnection->Close();
		if (SUCCEEDED(hr))
		{
			return true;
		}
		return false;
	}
	catch (_com_error e)///捕捉异常
	{
		CString errormessage;
		errormessage.Format("连接数据库失败!\r\n错误信息:%s", e.ErrorMessage());
		//		AfxMessageBox(errormessage);///显示错误信息
		return false;
	}
}
//ADO添加代码

这是关闭数据库

实现了处理

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_mfc_09

数据库的基本按钮设置

我们在前文中提到了button,这里我们还需要四个button,分别是增删改查,再对代码进行处理。我们首先设置基础界面。

这是我设置完的效果图,右边的树形控件下一部分再写,先完成最基本的按钮设置。

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_microsoft_10


输入按钮Edit Control

修改其ID为姓名,年龄对应的ID

这个窗口是要对应一个变量的(可以作为输入,也可作为输出),所以要使用添加变量的方式添加变量m_name

效果图:

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_mfc_11


添加的效果

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_数据库_12

单选钮Radio Button

同时使用组合框Group Box

将其中一个旋钮的Group属性设置成Flase,并且修改ID和添加变量,这里有了Group属性设置成Flase之后,将“男”的Group属性改变成True,就可以以“男”作为起始,实现对数据的处理。

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_数据库_13


下拉按钮Combo Box

但需要在属性里进行处理,一般将Type属性修改为下拉列表

有两种方式进行初始化,第一种是在添加变量的时候设置为控件变量,但需要在代码里通过add的方式进行添加数据

另一种方式是在添加变量的时候设置成值变量,这样的话,可以在属性data数据里进行初始化。

c 连接mysql数据库增删改查代码 mfc sql连接vc增删改查_c 连接mysql数据库增删改查代码_14