mysql和VS2010 C++链接过程中出现的问题

PS:二者连接的过程主要参考这篇博客园文章,http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html

    这篇博客园的文章中的代码已经被我改好,附到下面去了!

 

1.在C++和mysql连接编译遇到的第一个问题:

error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_query@8,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用
error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用

 

解决方案:

这篇博客也阐述了.lib和.dll的区别,主要是VS2010 win32平台和Mysql的64位平台不兼容的问题。

http://blog.csdn.net/tspangle/article/details/43539721

 

2.无法启动该程序,因为计算机中缺少libmysql.dll

解决方案:

参考这篇百度知道:
http://zhidao.baidu.com/link?url=FQCpGjEqgdwTKO_QS1q0aaim5Opzcaze3W0UX4l1iYmxb84b8H__9ZsAHKc7XOpt5PYWVQ8h7FgI2kt_ODsB4q

需把libmysql.dll放到项目bin\Debug文件夹中

3.Unable to connect the database,check your configuration!

主要原因是对mysql_real_connet的参数传递错误

该函数原型是:

MYSQL *  STDCALL mysql_real_connect(MYSQL *mysql, const char *host,
        const char *user,
        const char *passwd,
        const char *db,
        unsigned int port,
        const char *unix_socket,
        unsigned long clientflag);

其中我的数据库的user="root",password="",哈哈,填写自己的就好啦,

db是建立的数据库的名字,我在mysql的命令窗口自己建立了一个mytest的数据库,路径为C:\ProgramData\MySQL\MySQL Server 5.7\Data

所以db="mytest"

其他的按照常规设置就好了,这几个是比较个性化的设置。

如果连接数据库的过程中出错了,可以查看C:\ProgramData\MySQL\MySQL Server 5.7\Data文件夹下的.err错误日志来查看错误原因,并且可以对症下药!

 

 

  1 #include <windows.h>
  2 #include "stdio.h"
  3 #include "winsock.h" 
  4 #include "mysql.h" 
  5 #pragma comment (lib, "libmysql.lib")
  6 #pragma comment (lib, "mysqlclient.lib")
  7  int main()
  8 {
  9 
 10     MYSQL * con; //= mysql_init((MYSQL*) 0); 
 11     MYSQL_RES *res;  
 12     MYSQL_ROW row;
 13     char tmp[400];
 14     //database configuartion
 15     char dbuser[30]="root";   
 16     char dbpasswd[30]="123456"; // it must be    changed
 17     char dbip[30]="localhost";  
 18     char dbname[50]="mytest";  
 19     char tablename[50]="tab";  
 20     char *query=NULL;
 21 
 22     int x; 
 23     int y;  
 24     int rt;//return value  
 25     unsigned int t;
 26 
 27     int count = 0;
 28 
 29     printf("input x,y\n"); 
 30     scanf("%d,%d",&x,&y); 
 31     fflush(stdin);  
 32     printf("input over\n");  
 33     
 34 
 35     con = mysql_init((MYSQL*) 0); 
 36     //con = mysql_init(&mysql); 
 37     
 38     
 39     if ( con !=NULL && mysql_real_connect(con,dbip,dbuser,dbpasswd,dbname,3306,NULL,0) ) 
 40     {
 41         if (!mysql_select_db(con,dbname)) 
 42         {
 43             printf("Select successfully the database!\n"); 
 44             con ->reconnect = 1; 
 45             query = "set names \'GBK\'";
 46             rt=mysql_real_query(con,query,strlen(query));
 47             if (rt)
 48             {
 49                 printf("Error making query: %s !!!\n",mysql_error(con));
 50             }
 51             else
 52             {
 53                 printf("query %s succeed!\n",query);
 54             }
 55         }
 56     }
 57     else
 58     {
 59         MessageBoxA(NULL,"Unable to connect the database,check your configuration!","",NULL);
 60     }
 61 
 62     sprintf(tmp,"insert into %s values(%s,%d,%d)",tablename,"null",x,y); //注意如何向具有自增字段的数据库中插入记录
 63 
 64 
 65     rt=mysql_real_query(con,tmp,strlen(tmp));
 66     if (rt)
 67     {
 68         printf("Error making query: %s !!!\n",mysql_error(con));
 69     }
 70     else
 71     {
 72         printf("%s executed!!!\n",tmp);
 73     }
 74 
 75     sprintf(tmp,"select * from %s",tablename);
 76     rt=mysql_real_query(con,tmp,strlen(tmp));
 77     if (rt)
 78     {
 79         printf("Error making query: %s !!!\n",mysql_error(con));
 80     }
 81     else
 82     {
 83         printf("%s executed!!!\n",tmp);
 84     }
 85     res = mysql_store_result(con);//将结果保存在res结构体中
 86 
 87     while(row = mysql_fetch_row(res))  
 88     {
 89         for(t=0;t<mysql_num_fields(res);t++)  
 90         {
 91             printf("%s  ",row[t]);  
 92         }
 93         printf(".............\n");  
 94         count ++;
 95     }
 96 
 97     printf("number of rows %d\n",count);
 98     printf("mysql_free_result...\n");  
 99     mysql_free_result(res);  
100     mysql_close(con);
101     return 0;
102 }

 

posted @ 2016-05-26 15:01  学会走路  阅读(1287)  评论(0编辑  收藏  举报