本篇文章以环境:win7 x64、vs2008、mysql为例进行讲解C如何与MySQL连接

对于已经安装mysql的,查看mysql安装目录,如果安装目录下没有include和lib目录,

说明没有完全安装,需要下载mysql-connector类库,官方下载地址:http://dev.mysql.com/downloads/connector/c/

推荐课程:C语言教程。

部分截图如下,从图左侧可看出,官网提供了c、c++、Python、J等语言的链接库,根据个人情况下载。

下面开始配置vs2008,大致需要三步。

由于我们要使用Mysql的API,并且我们机子上肯定安装了Mysql数据库,所以我们要将工程的头文件路径指向Mysql安装目录的同文件mysql.h所在的位置,将连接库路径指向libmysql.lib所在的路径,

这两个文件一般在include、lib目录下。

新建一个项目,右键该项目,选择属性,弹出属性对话框。

第一:将x项目属性页的C/C++->常规->附加包含目录指向mysql.h所在的位置:C:\Program Files\MySQL\MySQL Server 5.1\include

第二:将项目属性页的链接器->常规->附加库目录指向libmysql.lib所在的路径:C:\Program Files\MySQL\MySQL Server 5.1\lib.

第三:将链接器->输入->附加依赖项中添加libmysql.lib。

通过上述配置后出现错误:

无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_free_result@4,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_num_fields@4,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_fetch_row@4,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_store_result@4,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_error@4,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_real_query@12,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_select_db@8,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用
无法解析的外部符号 _mysql_init@4,该符号在

经过网友帮助,我将原来下载的64位mysql-connector卸载,又重新下了一个32位安装,结果错误消失,百思不得其解,可能是我的mysql数据库是32位的吧。

最后附上c连接mysql的示例代码:

// test9.24.cpp : 定义控制台应用程序的入口点。////#include <stdio.h> //#include <stdlib.h> //#include <mysql.h>  //包含MySQL所需要的头文件 //#include <WinSock2.h> //Socket,连接MySQL也需要用的  #include <windows.h>#include "stdio.h"#include "winsock.h" #include "mysql.h"  MYSQL mysql, *sock;   //声明MySQL的句柄  int main(void) {      const char * host = "127.0.0.1";  //因为是作为本机测试,所以填写的是本地IP     const char * user = "root";       //这里改为你的用户名,即连接MySQL的用户名     const char * passwd = "123"; //这里改为你的用户密码     const char * db = "yiersan";      //这里改为你要连接的数据库的名字     unsigned int port = 3306;           //这是MySQL的服务器的端口,如果你没有修改过的话就是3306。     const char * unix_socket = NULL;    //unix_socket这是unix下的,我在Windows下,所以就把它设置为NULL     unsigned long client_flag = 0;      //这个参数一般为0     int t;    const char * i_query = "select * from yes_msg"; //查询语句      MYSQL_RES * result;                          //保存结果集的 www.2cto.com      MYSQL_ROW row;                               //代表的是结果集中的一行      mysql_init(&mysql);                          //连接之前必须使用这个函数来初始化     if ( (sock = mysql_real_connect(&mysql, host, user, passwd, db, port, unix_socket, client_flag) ) == NULL ) //连接MySQL     {         printf("连接失败,原因是: \n");         fprintf(stderr, " %s\n", mysql_error(&mysql));         exit(1);     }     else     {         fprintf(stderr, "连接MySQL成功!!\n");     }      if ( mysql_query(&mysql, i_query) != 0 )       //如果连接成功,则开始查询     {         fprintf(stderr, "查询失败!\n");         exit(1);     }     else     {         if ( (result = mysql_store_result(&mysql)) == NULL ) //保存查询的结果         {             fprintf(stderr, "保存结果集失败!\n");             exit(1);         }         else         {             while ( (row = mysql_fetch_row(result)) != NULL ) //读取结果集中的数据,返回的是下一行。因为保存结果集时,当前的游标在第一行【之前】             {                 printf("name is %s\t", row[0]);               //打印当前行的第一列的数据                 printf("age is %s\t\n", row[1]);              //打印当前行的第二列的数据             }         }      }     mysql_free_result(result);                                //释放结果集     mysql_close(sock);scanf("%d",&t);//关闭连接     system("pause");     exit(EXIT_SUCCESS); }

更多相关文章

  1. srand(time(null))函数是什么意思
  2. srand(time(0))函数是什么意思
  3. malloc函数的用法
  4. c语言定义函数
  5. memcpy函数用法
  6. c语言函数调用例子
  7. c语言“或”符号
  8. c++如何实现字符串分割函数split?(代码示例)
  9. c语言find函数的用法详解

随机推荐

  1. SystemUI源码分析
  2. android AndroidManifest.xml 权限示例
  3. Android实现TextView动画缩放
  4. android 资料收集大全
  5. Android有进度条的下载图片并且显示图片
  6. Android 系统 图标的使用
  7. Android相关sdk使用
  8. android logger 简要分析 (kernel 3.0.0)
  9. Android(安卓)画图之抗锯齿
  10. 使用navigator.userAgent.toLowerCase()