VC连接MySQL

来源:互联网 发布:mac os 10.13下载地址 编辑:程序博客网 时间:2024/06/06 00:27

VC连接MySQL

问题

(1)    出现以下DEBUG信息时:

TestNewSql.obj : error LNK2001: unresolved external symbol _mysql_close@4

TestNewSql.obj : error LNK2001: unresolved external symbol _mysql_select_db@8

TestNewSql.obj : error LNK2001: unresolved external symbol _mysql_real_connect@32

TestNewSql.obj : error LNK2001: unresolved external symbol _mysql_init@4

解决方法:

在VC工程中project—>setting—>link—>object/library modules中添加:

libmysql.lib,然后编译就可以通过了

(2)    如果是在其他文件中引用的,在tools —>options —>directories—>show directories for :include files对应的项目中包含这些头文件。

(3)    编译通过后,在运行时弹出对话框找不到libmysql.dll文件,在所安装的mysql目录下的lib\debug目录下可以找到该文件。将其复制到编译好的release/debug目录下即可。或是通过“控制面板”—>“系统” —>“高级”—>“环境变量”—>“系统变量”—>“paht”中添加D:\mysql\lib\debug。注:d:\mysql为笔者安装的mysql目录。

(4)    如果出现以下编译问题

error C2146: syntax error : missing ';' before identifier 'fd'

这是mysql_com.h中出现的问题。如果将这句声明注释掉,下面会出现这个编译问题:

error C2065: 'SOCKET' : undeclared identifier

可以将int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen,unsigned int timeout);该函数注释掉。或在包含mysql.h之前包含winsock.h.

则编译可以通过。

出现的原因分析:在用VC向导生成文档/视图时,在第四步中应该选择windows sockets。不然编译时就会出现上述问题。

最好的解决方式是在stdafx.h文件中添加#include <afxsock.h>,即可解决上述问题。

(5)    如果连接数据库时,出现不能连接的情况时,则应该将所在网络断开。出现问题的原因同上。

如果是数据库连接错误的话,则因为在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 int clientflag);

对于passwd应该设置为NULL。对于user可以随意设置。

原因暂时不清楚。

上述情况下只能对用户使用“root”和,就可以连接数据库了。

a.      如果以其他用户的身份,则需要添加相应的用户和密码。

步骤一:在命令行方式下运行MYSQL。

格式: mysql -h主机地址 -u用户名 -p用户密码

例如:连接到本机上的MYSQL。

首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:

mysql -h110.110.110.110 -uroot -pabcd123

步骤二:增加新用户

格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"

例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:

grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";

但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。

例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。 grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc" 

 

 

例子:

(1)程序

#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
//#include <afxsock.h> 
#include "mysql.h"
int main(int avgc,char *argv[]){
    MYSQL *conn_ptr;
    conn_ptr = mysql_init(NULL);
    if(!conn_ptr){
        fprintf(stderr,"mysql init failed/n");
        return EXIT_FAILURE;
    }
    conn_ptr = mysql_real_connect(conn_ptr,"172.20.97.228","root","qwertyuiop","mysql",3306,NULL,0);
    if(conn_ptr){
        printf("Connection success/n");
    }else{
        printf("Connection failed/n");
    }
    mysql_close(conn_ptr);
    return EXIT_SUCCESS;
}
       (2)工程-连接-对象/模块中加入libmysql.lib

(3)将Mysql目录下的lib\debug下的libmysql.dll复制到程序编译后的debug文件夹里


原创粉丝点击