




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VC的MySQL编程一、在你的程序中使用数据库是不错的注意。如果已经有可用的MySQL服务器,在VC中可以按照如下方法实现与数据库的连接。1、找来MySQL(Win32)安装目录下的include文件夹,将其添加到VC头文件目录列表中;(VC6 - Options - Directories - 加入此目录)(VC2005 - 工具 - 选择 -项目和解决方案 - VC+目录 - 显示以下內容的目录 - 包含文件 - 加入此目录)2、找来MySQL(Win32)安装目录下的lib文件夹,将 其添加到VC库文件目录列表中;(VC6 - Options - Directories - 加入此目录)(VC2005 - 工具 -选择 - 项目和解決方案 - VC+目录 - 显示以下內容的目录 - 库文件 - 加入此目录,注意是libdebug或libopt)3、新建一个工程,参考如下代码:/ mysql.cpp : Defines the entry point for the console application.#include stdafx.h#include #include #include #include #pragma comment(lib, libmysql.lib)int main(int argc, char* argv) unsigned short Port = 3306; char *IPAddress = 192.168.31.56; char *UserName = root; char *Password = ; char *DBName = SAS_1_2_0; printf(Start. ); MYSQL *ssock; /char execsql500; ssock = (MYSQL *)malloc(sizeof(MYSQL); /在某些版本中,不需要该初始化工作,可观看mysql.H以及readme mysql_init(ssock); if(ssock = NULL) printf(EROR: MySQL ssock init error. ); return FALSE; /连接到指定的数据库 ssock = mysql_real_connect(ssock, IPAddress, UserName, Password, NULL, Port, NULL, 0); if(!ssock) printf(conn fail. ); /memcpy(eee, mysql_error(ssock), 20); /fprintf(stderr, Failed to connect to database: Error: %s , mysql_error(ssock); /printf(%c , eee); unsigned int mtint = mysql_errno(ssock); /printf(%d ); return FALSE; if(mysql_select_db(ssock, DBName) != 0) printf(select db error. ); return FALSE; printf(version=%d , mysql_get_server_version(ssock); /exec my execsql string /sprintf(execsql,create table girls (name char(10),age int); /mysql_real_query(ssock,execsql,strlen(execsql); mysql_close(ssock); printf(End. ); return TRUE;二、怎样用c/c+编程连接mysql数据库 执行一个查询有以下几个步骤要做。首先执行一个查询,然后保存结果, 得到的是一个子集。这里是一个小例子: #include #include #include MYSQL mysql; MYSQL_RES *res; MYSQL_ROW row; void exiterr(int exitcode) fprintf( stderr, %sn, mysql_error(&mysql) ); exit( exitcode ); int main() uint i = 0; if (!(mysql_connect(&mysql,host,username,password) exiterr(1); if (mysql_select_db(&mysql,payroll) exiterr(2); if (mysql_query(&mysql,SELECT name,rate FROM emp_master) exiterr(3); if (!(res = mysql_store_result(&mysql) exiterr(4); while(row = mysql_fetch_row(res) for (i=0 ; i mysql_num_fields(res); i+) printf(%sn,rowi); mysql_free_result(res); mysql_close(&mysql); mysql_query 函数将把查询送给服务器,如果查询成功,调用mysql_store_result 函数将分配一个MYSQL_RES 结构并且重新从服务器获得一个结果集。 你可以用mysql_fetch_row 函数来查看数据。这样做你将获得一个 MYSQL_ROW 指针指向数据中的一行。 MYSQL_ROW 指针是一简单的字符串数组。所有的数据类型被转换成字符串送到客户端。 mysql_num_fields函数将告诉你返回的列数。你可以继续调用mysql_fetch_row直到它返回一个空指针以得到查询中的每一行。 注意在这个例子里,我们没有检查有空指针的列。如果你不使用非空列的表,那么你必须检查一个特殊行的列是否为空。一旦你使用完毕一个结果集,你必须释放它。这通过 mysql_free_result 来完成。 最后调用mysql_close来关闭你和数据库之间的连接。 查看结果集你可以不用调用mysql_fetch_row就查出返回的结果集共有多少行。这由 int mysql_num_rows(MYSQL_RES *result)来完成。 改变到被下一个 mysql_fetch_row 调用返回的行,你可以用void mysql_data_seek(MYSQL_RES *res, uint offset) 改变到任意一行。 获得更多的信息 你可以使用这几个额外的函数来找出关于一个查询的更多的信息,并从服务器获得这些信息。 如果你执行一个UPDATE, INSERT 或者 DELETE 查询,你可以用int mysql_affected_rows 来查出共有多少行数据被你影响到。 如果在你的数据库里有二进制数据,那么得知数据的长度将是有用的。unsigned int *mysql_fetch_lengths(MYSQL_RES *mysql) 将返回一指出了结果集中每一列 的长度的整型数组。 当你插入一个带有 AUTO_INCREMENT 列的表的时候,你可以用int mysql_insert_id(MYSQL *mysql) 来查出生成的那一行的ID。 =int main() MYSQL mysql; MYSQL_RES * res ; MYSQL_FIELD * fd ; MYSQL_ROW row ; int id10000; double result100008; vector v; if(mysql_init(&mysql) = NULL) std:coutinit mysql data status failstd:endl; return false; else std:coutinit mysql data status successstd:endl;if(NULL = mysql_real_connect(&mysql,localhost,root,wsnss,MYSQL_PORT,NULL,0) std:coutconnect database failstd:endlmysql_error(&mysql)std:endl; return false;else std:coutconnect database successstd:endl;char szSqlText500=; int j = 0;sprintf(szSqlText,%s,select * from data_receive ); if (mysql_query( &mysql, szSqlText) /进行数据检索 /执行SQL语句出错 coutquery errorendl; mysql_close( &mysql ) ; return FALSE ; else res = mysql_store_result( &mysql ) ; int i; while(row = mysql_fetch_row(res) idj = atoi(row0); for (i = 1; i mysql_num_fields(res); i+) resultji-1 = atof(rowi); j+; for(int i = 0 ; i =j) break; char str10000; stringstream ss; ssinsert into data_receive(ID,data1,data2,data3, data4,data5,data6,data7,data8)values(idi, resulti0,resulti1,resulti2, resulti3,resulti4,resulti5, resulti6,resulti7); string s = ss.str(); v.push_back(s); for(vector:iterator iter = v.begin(); iter != v.end(); +iter) if(mysql_query(&mysql,(*iter).c_str()!=0) std:coutexecute insert syntax fail std:endlmysql_error(&mysql)Settings(设置),弹出对话框,选择Link标签进入Link设置,在Object/library modules 的框里面加入libmysql.lib有个空格WS2_32.LIB5、 在工程建立添加以下两个文件:第一个文件头文件:VspdCTOMySQL.h/*MYSQL IN C*/*2007 -03 -07 */*李克喜*/#include #include #include #include mysql.husing namespace std;class VspdCToMySQL public: /变量 MYSQL mysql; /* 构造函数和稀构函数 */ VspdCToMySQL(); VspdCToMySQL(); /* 主要的功能: 初始化数据库 连接数据库 设置字符集 入口参数: host :MYSQL服务器IP port:数据库端口 Db:数据库名称 user:数据库用户 passwd:数据库用户的密码 charset:希望使用的字符集 Msg:返回的消息,包括错误消息 出口参数: int :0表示成功;1表示失败 */ int ConnMySQL(char *host,char * port,char * Db,char * user,char* passwd,char * charset,char * Msg); /* 主要的功能: 查询数据 入口参数: SQL:查询的SQL语句 Cnum:查询的列数 Msg:返回的消息,包括错误消息 出口参数: string 准备放置返回的数据,多条记录则用0x06隔开,多个栏位用0x05隔开 如果 返回的长度 0,责表示舞结果 */ string SelectData(char * SQL,int Cnum ,char * Msg); /* 主要功能: 插入数据 入口参数 SQL:查询的SQL语句 Msg:返回的消息,包括错误消息 出口参数: int :0表示成功;1表示失败 */ int InsertData(char * SQL,char * Msg); /* 主要功能: 修改数据 入口参数 SQL:查询的SQL语句 Msg:返回的消息,包括错误消息 出口参数: int :0表示成功;1表示失败 */ int UpdateData(char * SQL,char * Msg); /* 主要功能: 删除数据 入口参数 SQL:查询的SQL语句 Msg:返回的消息,包括错误消息 出口参数: int :0表示成功;1表示失败 */ int DeleteData(char * SQL,char * Msg); /* 主要功能: 关闭数据库连接 */ void CloseMySQLConn(); 第二个文件实现文件:VspdCTOMySQL.cpp/*MYSQL IN C*/*2007 -03 -07 */*李克喜*/#include stdafx.h#include VspdCTOMySQL.hVspdCToMySQL:VspdCToMySQL()VspdCToMySQL:VspdCToMySQL()/初始化数据int VspdCToMySQL:ConnMySQL(char *host,char * port ,char * Db,char * user,char* passwd,char * charset,char * Msg) if( mysql_init(&mysql) = NULL ) Msg = inital mysql handle error; return 1; if (mysql_real_connect(&mysql,host,user,passwd,Db,0,NULL,0) = NULL) Msg = Failed to connect to database: Error; return 1; if(mysql_set_character_set(&mysql,GBK) != 0) Msg = mysql_set_character_set Error; return 1; return 0;/查询数据string VspdCToMySQL:SelectData(char * SQL,int Cnum,char * Msg) MYSQL_ROW m_row; MYSQL_RES *m_res; char sql2048; sprintf(sql,SQL); int rnum = 0; char rg = 0x06;/行隔开 char cg = 0x05;/字段隔开 if(mysql_query(&mysql,sql) != 0) Msg = select ps_info Error; return ; m_res = mysql_store_result(&mysql); if(m_res=NULL) Msg = select username Error; return ; string str(); while(m_row = mysql_fetch_row(m_res) for(int i = 0;i ConnMySQL(host,port,dbname,user,passwd,charset,Msg) = 0) printf(连接成功rn); else printf(Msg); /查询 char * SQL = SELECT ids,username,passwd,address FROM vcaccesstest; string str = vspdctomysql-SelectData(SQL,4,Msg); if( str.length(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年社会企业发展行业研究报告及未来发展趋势预测
- 2025年智能电网行业当前发展现状及增长策略研究报告
- 2025年市场营销师(市场营销调研与预测)技能资格知识考试题与答案
- 2025年材料员之材料员基础知识模考模拟试题(含答案)
- 2024年电网公司招聘:电工进网证安全及理论知识考试题库(附含答案)
- 2025年浇筑水闸门承包合同范本
- 2025年第三届农作物植保员技能大赛理论考试试题库(含答案)
- 摩托车返程安全知识培训课件
- 2024年全国“法人信贷”管理规定知识试题库(附含答案)
- 【2025年】四川省雅安市公务员省考公共基础知识预测试题含答案
- 儿童呼吸机基本使用
- 起重机械安全日管控、周排查、月调度制度
- 派出所民警心理健康辅导
- 民事诉讼法课件
- 管理学基础(第3版)全套教学课件
- 柿子醋生产技术规程
- 脊髓损伤病人的护理查房课件
- 经典安徒生童话故事100篇
- 劳务服务施工组织方案
- 汽车租赁服务投标方案
- 造价咨询公司规章制度及管理办法
评论
0/150
提交评论