可以考虑安装mysql-5.0.41-win32(可到http://www.newhua.com/soft/3573.htm处下载),当然你有更新的版本更好,注意选择“完全安装”(只有这样才会安装VC编译时需要的头文件等)。安装后期会进行服务器配置,你可以设置你的服务器登陆密码,也可以不设置密码。
二、VC6.0的设置
(1)打开VC6.0 工具栏Tools菜单下的Options选项,在Directories的标签页中右边的“Show directories for:”下拉列表中选中“Includefiles”,然后在中间列表框中添加你本地安装MySQL的include目录路径。(我的是D:\Program Files\MySQL\MySQL Server 5.0\include)。
(2)在上面说到的“Show directories for:”下拉列表中选中“Library files”,然后添加你本地安装MySQL的Lib目录路径。Lib目录下还有debug和opt两个目录,建议选debug。(我的是D:\Program Files\MySQL\MySQL Server 5.0\lib\debug)。
(3)在“Project settings->Link:Object/library modules”里面添加“libmysql.lib”。
(4)在stdafx.h里面添加如下的内容:(如果报'MYSQL' : missing storage-class or type specifiers等错,要将头文件加到对应类中)
#include "mysql.h" #include "winsock.h" // 如果编译出错,则把该行放到#include "mysql.h"之前 #pragma comment(lib,"libmySQL.lib") // 如果在附加依赖项里已增加,则就不要添加了
(5)建议将“libmySQL.lib、libmySQL.dll”拷到你所建的工程的目录下。
三、数据库、表的创建打开“开始->所有程序->MySQL->MySQL Server 5.0->MySQL Command Line Client.exe”,如果没有设置密码就直接按回车,会提示服务器启动成功。
mysql> SHOW DATABASES;//显示所有的数据库,注意一定要 敲“;”后再按回车
mysql> CREATE DATABASE mydb;//创建数据库mydb
mysql> USE mydb;//选择你所创建的数据库mydb
mysql> SHOW TABLES; //显示数据库中的表
mysql> CREATE TABLE mytable (username VARCHAR(100), visitelist VARCHAR(200), remark VARCHAR(200));//创建一个表mytable: 用户名;访问列表;备注
mysql> DESCRIBE mytable;//显示表的结构
四、VC编程
MYSQL mysql; //数据库连接句柄
mysql_init (&mysql);
if(!mysql_real_connect(&mysql,"localhost","root",NULL,"mydb",3306,NULL,0)) {//mydb为你所创建的数据库,3306为端口号,可自行设定
AfxMessageBox("数据库连接失败");
return FALSE;
}
(1)实现添加 功能
CString strUsername,strList,strRemark,strSQL;
strSQL.Format("insert into mytable(username,visitelist,remark) values(\'%s\',\'%s\',\'%s\')", strUsername,strList,strRemark);//注意一定要写在一行,而且必须要有\'\'
if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){
AfxMessageBox("增添失败");
}
(2)实现修改功能
CString strUsername,strList,strRemark,strSQL,str_PreName;//str_PreName用于记录想要修改的行,详情请看源代码
strSQL.Format("update mytable set username=\'%s\',visitelist=\'%s\', remark=\'%s\' where username=\'%s\'",strUsername,strList,strRemark,str_PreName);
if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){
AfxMessageBox("修改失败");
}
(3)实现删除功能
CString strSQL;
strSQL.Format("delete from mytable where username=\'%s\'",str_PreName);//必须要有\'\'
if(mysql_real_query(&mysql,(char*)(LPCTSTR)strSQL,(UINT)strSQL.GetLength())!=0){
AfxMessageBox("删除失败");
}
(4)读取表格内容到CListCtrl控件m_list
m_list.DeleteAllItems();
char *ch_query;
ch_query="select * from mytable";
if(mysql_real_query(&mysql,ch_query,(UINT)strlen(ch_query))!=0){
AfxMessageBox("数据库中表格出错");
}
CString str;
MYSQL_RES *result;
MYSQL_ROW row;
if(!(result=mysql_use_result(&mysql))){
AfxMessageBox("读取数据集失败");
}
int i=0;
while(row=mysql_fetch_row(result)){
str.Format("%s",row[0]);
m_list.InsertItem(i,str);
str.Format("%s",row[1]);
m_list.SetItemText(i,1,str);
str.Format("%s",row[2]);
m_list.SetItemText(i,2,str);
i++;
}
mysql_free_result(result);
(5)关闭数据库
mysql_close(&mysql);//最好写到OnDestroy()函数中
(6)测试代码
#include <windows.h>
#include <mysql.h>
#include "stdio.h"
MYSQL mysql, *sock; //mysql连接
MYSQL_RES *res; //这个结构代表返回行的一个查询结果集
MYSQL_ROW row; //一个行数据的类型安全(type-safe)的表示
char query[150]; //查询语句
bool ConnectDatabase(); //函数声明
void FreeConnect();
bool QueryDatabase();
bool InsertData();
int main()
{
ConnectDatabase();
QueryDatabase();
InsertData();
QueryDatabase();
FreeConnect();
return 0;
}
//连接数据库
bool ConnectDatabase()
{
//初始化mysql
mysql_init(&mysql); //连接mysql,数据库
if (!(sock = mysql_real_connect(&mysql,"localhost", "root", "root", "test",0,NULL,0)))
{
printf( "Error connecting to database:%s\n",mysql_error(&mysql));
return false;
}
else
{
printf("Connected...\n");
return true;
}
}
//释放资源
void FreeConnect()
{
//释放资源
mysql_free_result(res);
mysql_close(sock);
}
//查询数据
bool QueryDatabase()
{
sprintf(query, "select * from user"); //执行查询语句
if(mysql_query(sock, query)) //执行SQL语句
{
printf("Query failed (%s)\n",mysql_error(sock));
return false;
}
else
{
printf("query success\n");
}
//获取结果集
if (!(res=mysql_store_result(sock))) //获得sql语句结束后返回的结果集
{
printf("Couldn't get result from %s\n", mysql_error(sock));
return false;
}
//打印结果数
printf("number of fields returned: %d\n",mysql_affected_rows(sock));
//获取字段的信息
printf("|\t%s\t|\t%s\t|\t%s\t|\n", mysql_fetch_field(res)->name, //打印各字段名
mysql_fetch_field(res)->name,mysql_fetch_field(res)->name);
//打印获取的数据
while (row = mysql_fetch_row(res)) //获取下一行
{
printf("|\t%s\t|\t%s\t|\t%s\t|\n", row[0], row[1], row[2]);
}
return true;
}
//插入数据
bool InsertData()
{
sprintf(query, "insert into user values (NULL, 'name4', 44);");
if(mysql_query(sock, query)) //执行SQL语句
{
printf("Query failed (%s)\n",mysql_error(sock));
return false;
}
else
{
printf("Insert success\n");
return true;
}
}