MFC基于vs2103调用mysql数据库

          首先安装mysql,百度搜索到官网下载,下载好后按默认设置安装好,百度里面一大堆安装教程,设置好环境。在此建议如果对数据库完全不懂得话,建议先花2个小时玩玩mysql自带的MySQL Workbench 8.0 CE(我这里安装是新版8.0的版本)。到这里你要先在任务管理器里面把服务打开,不然是没法继续后续操作的,步骤:任务管理器—服务—找到MySQL80或者有的人是MySQL—右键:启动服务。然后打开Workbench ,在里面建立数据库,然后建立一张表格,随便增删改查的玩一玩,看看用人家官方给的工具能否对数据库进行一些基本操作。

         接下来就是打开vs2013,新建个MFC工程,基于对话框的,然后进行设置:

(1)项目—>属性—>配置属性—>C/C++—>附加包含目录:在附加包含目录中添加C:\Program Files\MySQL\MySQL Server 8.0\include(就是安装MySql下的include文件夹,将头文件包含)

(2)项目—>属性—>配置属性—>连接器—>常规—>附加库目录:C:\Program Files\MySQL\MySQL Server 8.0\lib(就是安装MySql下的lib文件夹,将库文件包含)

(3)连接器—>输入—>附加依赖项:添加libmysql.lib(若此处不添加,需要最后在头文件中添加 #pragmacomment(lib,"libmysql.lib") )。

(4)编译通过之后,运行还要将C:\Program Files\MySQL\MySQL Server 8.0\lib(安装MySql下的lib文件夹)中的libmysql.dll拷到项目中的Debug文件夹中(或者拷到C:\Windows\System32中)。

 (5)如果你下载的MySQL数据库是32位的,那就无所谓;如果你下载的是64位的,那么你还要改一下你的项目配置:点击“项目”—“属性”—右上角有个“配置管理器”—“活动平台解决方案”—“新建”—选择“x64”—“确定”。

(6)设置字符集:点击“项目”—“属性”—“配置属性”—“常规”—“字符集”—“使用多字节字符集”

(7)下载多字节插件:链接http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=40770

下面在项目头文件或者要连接数据库的文件程序中添加头文件:

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

到现在,配置已经完成了,接下来开始贴相关数据库增删改查的代码。


MYSQL m_sqlCon;

//连接数据库
bool CServerToolDlg::ConnectSQLData()
{
	mysql_init(&m_sqlCon);
	// localhost:服务器 root/123456为账号密码 student为数据库名 3306为端口  
	if (!mysql_real_connect(&m_sqlCon, "localhost", "root", "123456", "student", 3306, NULL, 0))
	{
		AfxMessageBox(_T("访问数据库失败!"));
		CString e = mysql_error(&m_sqlCon);//需要将项目属性中字符集修改为“使用多字节字符集”或“未设置”
		MessageBox(e);
		return false;
	}
	else
	{
		//AfxMessageBox(_T("成功!"));
		int a = mysql_query(&m_sqlCon, "SET NAMES 'GB2312'");//解决从数据库中读取数据后汉字乱码显示的问题
		return true;
	}
}

//增加数据
int CServerToolDlg::InsertSQLData(CString SQL, char* &Msg)
{
	char insert[1000];
	//sprintf_s(insert, "insert into str(idstr, name, sex) values (\'9\', \'888\', \'w\')");
	strcpy_s(insert, SQL);
	if (mysql_query(&m_sqlCon, insert) == 0)
	{
		//AfxMessageBox(_T("插入数据成功!"));
		return 0;
	}
	else
	{
		AfxMessageBox(_T("插入数据失败!"));
		return 1;
	}
}

//修改数据
int CServerToolDlg::UpdateSQLData(CString SQL, char* &Msg)
{
	char insert[1000];
	strcpy_s(insert, SQL);
	if (mysql_query(&m_sqlCon, insert) != 0)
	{
		AfxMessageBox(_T("修改数据失败!"));
		return 1;
	}
	//AfxMessageBox(_T("修改数据成功!"));
	return 0;
}

//删除数据
int CServerToolDlg::DeleteSQLData(CString SQL, char* &Msg)
{
	char insert[1000];
	strcpy_s(insert, SQL);
	if (mysql_query(&m_sqlCon, insert) != 0)
	{
		AfxMessageBox(_T("删除数据失败!"));
		return 1;
	}
	AfxMessageBox(_T("删除数据成功!"));
	return 0;
}

//查询数据
CString CServerToolDlg::SelectSQLData(CString SQL, char* &Msg)
{
	int res;
	MYSQL_RES *result = NULL;
	MYSQL_FIELD *field = NULL;

	res = mysql_query(&m_sqlCon, "select * from str where (name = '555')"); //读取数据库student的str表中name的数据
	//判断是否读取成功
	if (res)
		MessageBox("error");

	//保存结果    
	result = mysql_store_result(&m_sqlCon);
	//路径数据的个数
	int rowcount = mysql_num_rows(result);
	CString ss;
	ss.Format("%d", rowcount);
	MessageBox("有多少行=" + ss);
	//字段的个数
	int fieldcount = mysql_num_fields(result);
	ss.Format("%d", fieldcount);
	MessageBox("有多少列=" + ss);
	//显示所有字段
	for (int i = 0; i < fieldcount; i++)
	{
		field = mysql_fetch_field_direct(result, i);
		//MessageBox(field->name);
	}

	//显示各个字段下的所有数据
	MYSQL_ROW row = NULL;
	row = mysql_fetch_row(result);
	while (NULL != row)
	{
		for (int i = 0; i

基本上就是这样,主要在于SQL语句的运用,下面列举几个常用的语句类型:

TRUNCATE TABLE excel1;       //清空数据库的内容,并使ID为1

SET SQL_SAFE_UPDATES = 0;    //修改数据库的安全模式,0低1高
SELECT * FROM student.str;    //列表出来
DELETE FROM str WHERE (sex = 9);    //删除指定的内容
SELECT * FROM student.str where (name = '555');    //查询数据
UPDATE str SET sex = 'q' WHERE (idstr = '6');    //修改数据
insert into str(idstr, name, sex) values (\'9\', \'888\', \'w\')    //插入数据
INSERT INTO TABLE(col1, col2) SELECT val11, val12 UNION ALL SELECT val21, val22 ;    //插入多条数据

最后特别注意的是分号;问题,在MFC中,SQL语句的最后不要带号。例如我调用上面的一个函数

CString SQL = "insert into str(idstr, name, sex) values (\'9\', \'888\', \'w\')";	//增加指令
		SQL = "DELETE FROM str WHERE (idstr = 8)";	//删除指令
		SQL = "UPDATE str SET sex = 'qqq' WHERE (idstr = '5')";	//插入指令

		UpdateSQLData(SQL, Msg);
		//SelectSQLData(SQL, Msg);
		//DeleteSQLData(SQL, Msg);
		//InsertSQLData(SQL, Msg);

嗯,基本上就是这样了,记录一下,以后用的时候方便点!

普通用户授权指令:

grant select on hypinfo.bom_sum to 'hyjhz'@'%' identified by 'readonly.123'; 

MySQL远程访问不行解决办法

找到MySQL安装的bin目录,打开cmd窗口,输入下面

mysql -u root -p 123456
use mysql;
update user set host = '%' where user = 'root';
select host,use from user;
flush privileges;

 

你可能感兴趣的:(c++操作数据库的小知识)