先说连接MFC 或者C++ Mysql的步骤:
连接数据库过程中可能会报以下两个错误,
error C2146: syntax error : missing ';' before identifier 'fd' error LNK2019: unresolved external symbol _mysql_init 解决方法后面说。
在调用之前,当然首先要配置环境,打开Tools-Options-Projects and Solutions-VC++ Directories . 选择Win32 的设置(这个一般是默认的),然后选择include files, 加入 MySQL 的头文件目录,一般是%MySQL_SERVER_HOME%/include (MySQL_SERVER_HOME替换成你的Mysql server安装目录), 同理在library files 中加入 %MySQL_SERVER_HOME%/ilib目录
在使用mysql函数之前,先#include <WinSock2.h>, 否则会报error C2146: syntax error : missing ';' before identifier 'fd' ,因为Mysql内部是通过TCP/IP协议实现客户端和服务端连接的, 其次#include <mysql.h> 然后,如果没有在Project properties中添加依赖,则再加上这么一句#pragma comment(lib, "libmysql.lib") ,这样子就配置好了。
然后这里有个小例子,供新手测试用:
mysql_init (&mysql);
if(!mysql_real_connect(&mysql, "127.0.0.1", "root", "123456", "test", 3306, NULL, 0))
{
AfxMessageBox("连接数据库失败");
return;
}
mysql_query(&mysql,"DROP TABLE IF EXISTS TEST");
mysql_query(&mysql, "CREATE TABLE IF NOT EXISTS TEST \
(ID INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20))");
mysql_query(&mysql, "INSERT INTO TEST(NAME) VALUES('Lucy')");
mysql_query(&mysql, "INSERT INTO TEST(NAME) VALUES('Kevin')");
mysql_query(&mysql, "SELECT * FROM TEST");
MYSQL_RES *res = mysql_store_result(&mysql);
MYSQL_ROW row;
while(row = mysql_fetch_row(res))
{
for(int t=0; t<mysql_num_fields(res); t++)
{
AfxMessageBox(row[t]);
}
}
mysql_free_result(res);
mysql_close(&mysql);
这里只是一个代码片段,如果是在Win32 控制台程序中,则用printf输出结果。
这里再讲最后一个问题,就是error LNK2019: unresolved external symbol _mysql_init等错误,即调用函数出问题了,一般,头文件包含了,然后调用函数出问题了,基本上都是一个原因,就是lib文件有问题,在这里也是这个原因,Win32程序调用64为的libmysql.lib就会报错,因此,要包含32位的lib文件,这里提供32为lib,同时,建议将64位mysql的libmysql.lib更名,因为本人测试过程中发现,不将mysql自带的libmysql更名,则同样会默认包含mysql自带的libmysql.lib, 当然你也可以讲32位的libmysql.lib 改个名字,然后用#param comment就OK了。编译连接通过之后,运行还要讲32为的libmysql.dll放在程序目录或者System32 目录之下, 接下来的提供的是32位lib和dll文件下载连接 点击打开链接