1、设置工程属性
包含目录 D:\amp\MySQL5\lib\debug;D:\amp\MySQL5\include
2、头文件
代码:
#include "mysql.h"
#pragma comment(lib,"libmySQL.lib")
public:
...
MYSQL mysql;
char *sql;
MYSQL_RES *result;
MYSQL_ROW row;
4、连接数据库
//mysql_real_connect(数据库句柄,主机名,用户名,密码,数据库名,端口,命名管道,客户端标记)
代 码:
mysql_init(&mysql);
if
(!mysql_real_connect(&mysql,"localhost","root","1","mydb",3306,NULL,0))
{
MessageBox(_T("
数据库连接错误!"));
return FALSE;
}
mysql_query(&mysql,"SET NAMES
gb2312");
mysql_query(&mysql,"SET character
set gb2312");
5、如果连接成功,就可以进行数据库的读写了:
步骤是:
1.mysql_query()提交查询语句
2.mysql_use_result() 获取上一次查询的结果集
3.mysql_fetch_row()从结果集中获取单项内容
4.mysql_free_result() 释放结果集
根据建vc工程的属性:
a.如果不是unicode,只需要在输入输出数据库的地方加上
mysql_query(&mysql,"SET NAMES gb2312");
b.如果是unicode,文件是ANSI编码,要进
行转换,转换是用MultiByteToWideChar()和WideCharToMultiByte()这两个Windows
API,前者ANSI > Unicode, 后者Unicode >
ANSI。
ANSI > Unicode:
WCHAR ch[200];
MultiByteToWideChar(CP_ACP,0,row[0],nLength[0]+1,ch,sizeof(ch));
===============================================
Unicode > ANSI:
// 将CString的内容转换为ANSI
void UnicodeToAnsi( CString str,char *pstr )
{
WCHAR *pwtrQuery;
pwtrQuery = (WCHAR *)(LPCTSTR)str;
WideCharToMultiByte(CP_ACP,0,pwtrQuery,-1,pstr,strlen(pstr),NULL,NULL);
}
使用方法:
char ch[200];
CString str = L"Unicode charactor";
UnicodeToAnsi(ch, str);
Unicode版代码:
sql = "select username,visitelist,remark from
mytable";
if(mysql_query(&mysql,
sql)!=0)
{
MessageBox(_T("
读取表出错!"));
return;}
if(!(result =
mysql_use_result(&mysql)))
{
MessageBox(_T("读取数据集失败!"));
return;}
int i = 0;
CString tmp;
WCHAR wsz[100];
unsigned long *nLength;
while(row = mysql_fetch_row(result))
{
//ANSI >
Unicode
// 获取结果字段的长度
nLength =
mysql_fetch_lengths(result);
// 获取结果集中第一个字段的内容
MultiByteToWideChar(CP_ACP,0,row[0],nLength[0]+1,wsz,sizeof(wsz));
//tmp.Format(_T("%s"),row[0]);
m_list.InsertItem(0, wsz);
nLength =
mysql_fetch_lengths(result);
MultiByteToWideChar(CP_ACP,0,row[1],nLength[1]+1,wsz,sizeof(wsz));
//tmp.Format(_T("%s"),row[1]);
m_list.SetItemText(0, 1,
wsz);
nLength =
mysql_fetch_lengths(result);
MultiByteToWideChar(CP_ACP,0,row[2],nLength[2]+1,wsz,sizeof(wsz));
//tmp.Format(_T("%s"),row[2]);
m_list.SetItemText(0, 2,
wsz);
i++;
}
mysql_free_result(result);
非Unicode版代码:
...
while(row = mysql_fetch_row(result))
{
tmp.Format("%s",row[0]);
m_list.InsertItem(0, tmp);
nLength =
mysql_fetch_lengths(result);
tmp.Format("%s",row[1]);
m_list.SetItemText(0, 1,
tmp);
nLength =
mysql_fetch_lengths(result);
tmp.Format("%s",row[2]);
m_list.SetItemText(0, 2,
tmp);
i++;
}
...