龙涎"
c 连接mysql(MYSQL C api使用)
龙涎2010-07-19 15:08:12
阅读:639
标签:mysqlit
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 ;
}