您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 57VC连接MySQL
《VC连接MySQL》Ps:在项目中要用到MySQL,移植代码的时候报错如下,搜索找到此文章,特此收藏。老是粗心大意,就是忘记设置导入libmysql.lib当然也不必看完下面全文,可能的情况还有,没有设置对头文件or根本没包含这,#includewinsock.h#includemysql.h这两个的位置应该如此,反正没发现反过来能编译通过的。问题(1)出现以下DEBUG信息时:TestNewSql.obj:errorLNK2001:unresolvedexternalsymbol_mysql_close@4TestNewSql.obj:errorLNK2001:unresolvedexternalsymbol_mysql_select_db@8TestNewSql.obj:errorLNK2001:unresolvedexternalsymbol_mysql_real_connect@32TestNewSql.obj:errorLNK2001:unresolvedexternalsymbol_mysql_init@4解决方法:在VC工程中project—setting—link—object/librarymodules中添加:libmysql.lib,然后编译就可以通过了(2)如果是在其他文件中引用的,在tools—options—directories—showdirectoriesfor:includefiles对应的项目中包含这些头文件。(3)编译通过后,在运行时弹出对话框找不到libmysql.dll文件,在所安装的mysql目录下的lib\debug目录下可以找到该文件。将其复制到编译好的release/debug目录下即可。或是通过“控制面板”—“系统”—“高级”—“环境变量”—“系统变量”—“paht”中添加D:\mysql\lib\debug。注:d:\mysql为笔者安装的mysql目录。(4)如果出现以下编译问题errorC2146:syntaxerror:missing';'beforeidentifier'fd'这是mysql_com.h中出现的问题。如果将这句声明注释掉,下面会出现这个编译问题:errorC2065:'SOCKET':undeclaredidentifier可以将intmy_connect(my_sockets,conststructsockaddr*name,unsignedintnamelen,unsignedinttimeout);该函数注释掉。或在包含mysql.h之前包含winsock.h.则编译可以通过。出现的原因分析:在用VC向导生成文档/视图时,在第四步中应该选择windowssockets。不然编译时就会出现上述问题。最好的解决方式是在stdafx.h文件中添加#includeafxsock.h,即可解决上述问题。(5)如果连接数据库时,出现不能连接的情况时,则应该将所在网络断开。出现问题的原因同上。如果是数据库连接错误的话,则因为在MYSQL*STDCALLmysql_real_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedintport,constchar*unix_socket,unsignedintclientflag);对于passwd应该设置为NULL。对于user可以随意设置。原因暂时不清楚。上述情况下只能对用户使用“root”和,就可以连接数据库了。a.如果以其他用户的身份,则需要添加相应的用户和密码。步骤一:在命令行方式下运行MYSQL。格式:mysql-h主机地址-u用户名-p用户密码例如:连接到本机上的MYSQL。首先在打开DOS窗口,然后进入目录mysqlbin,再键入命令mysql-uroot-p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:mysql-h110.110.110.110-uroot-pabcd123步骤二:增加新用户格式:grantselecton数据库.*to用户名@登录主机identifiedby密码例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:grantselect,insert,update,deleteon*.*totest1@%Identifiedbyabc;但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。grantselect,insert,update,deleteonmydb.*totest2@localhostidentifiedbyabc例子:(1)程序#includestdio.h#includestdlib.h#includewinsock.h//#includeafxsock.h#includemysql.hintmain(intavgc,char*argv[]){MYSQL*conn_ptr;conn_ptr=mysql_init(NULL);if(!conn_ptr){fprintf(stderr,mysqlinitfailed/n);returnEXIT_FAILURE;}conn_ptr=mysql_real_connect(conn_ptr,172.20.97.228,root,qwertyuiop,mysql,3306,NULL,0);if(conn_ptr){printf(Connectionsuccess/n);}else{printf(Connectionfailed/n);}mysql_close(conn_ptr);returnEXIT_SUCCESS;}(2)工程-连接-对象/模块中加入libmysql.lib(3)将Mysql目录下的lib\debug下的libmysql.dll复制到程序编译后的debug文件夹里VC的MySQL編程在你的程式中使用數據庫是個不錯的注意。如果已經有可用的MySQL服務器,在VC中可以按照如下方法實現與數據庫的駁接。1、找來MySQL(Win32)安裝目錄下的include文件夾,將其添加到VC頭文件目錄列表中;(VC6-Options-Directories-加入此目錄)(VC2005-工具-選項-項目和解決方案-VC++目錄-顯示以下內容的目錄-包含文件-加入此目錄)2、找來MySQL(Win32)安裝目錄下的lib文件夾,將其添加到VC庫文件目錄列表中;(VC6-Options-Directories-加入此目錄)(VC2005-工具-選項-項目和解決方案-VC++目錄-顯示以下內容的目錄-庫文件-加入此目錄,注意是lib\debug或lib\opt)3、新建一個工程,參考如下代碼;//mysql.cpp:Definestheentrypointfortheconsoleapplication.//#includestdafx.h#includestdio.h#includewinsock.h#includemysql.h#includewindows.h#pragmacomment(lib,libmysql.lib)intmain(intargc,char*argv[]){unsignedshortPort=3306;char*IPAddress=192.168.31.56;char*UserName=root;char*Password=;char*DBName=SAS_1_2_0;printf(Start...);MYSQL*ssock;//charexecsql[500];ssock=(MYSQL*)malloc(sizeof(MYSQL));//在某些版本中,不需要該初始化工作,可觀看mysql.H以及readmemysql_init(ssock);if(ssock==NULL){printf(EROR:MySQLssockiniterror.);returnFALSE;}//連接到指定數據庫ssock=mysql_real_connect(ssock,IPAddress,UserName,Password,NULL,Port,NULL,0);if(!ssock){printf(connfail...);//memcpy(eee,mysql_error(ssock),20);//fprintf(stderr,Failedtoconnecttodatabase:Error:%s,mysql_error(ssock));//printf(%c,eee);unsignedintmtint=mysql_errno(ssock);//printf(%d);returnFALSE;}if(mysql_select_db(ssock,DBName)!=0){printf(selectdberror.);returnFALSE;}printf(version=%d,mysql_get_server_version(ssock));//execmyexecsqlstring//sprintf(execsql,createtablegirls(namechar(10),ageint));//mysql_real_query(ssock,execsql,strlen(execsql));mysql_close(ssock);printf(End...);returnTRUE;}3、編譯鏈接,運行即可。VC++6.0中用ODBC连接mysql数据库下图是程序的最终效果,包含了数据的显示,添加,修改,删除这几项数据库操作的常用功能。我的调试环境是xp,mysql版本是mysql4.0.231.安装Mysql的ODBC驱动从上下载驱动程序地址:我是下载的WindowsZIP/Setup.EXE下载到本机之后从zip包中解压出setup.exe文件,双击安装,没什么可说的,完全的傻瓜式安装2.设置ODBC数据源配置MySQL的ODBC数据源有两种方法第一种:手工设置比较麻烦,但是确是比较安全的办法。步骤如下:开始-控制面板-管理工具-数据源(ODBC),双击数据源(ODBC)之后会出来如下的界面点击右上角的添加按钮之后会出现如下的界面可以看到,我们刚才安装的驱动程序已经出现在列表中了,选中它,然后单击完成,此时会出来下面的界面按上图所示,填写好各项连接所需要的信息点击“Test”可以进行测试,如果出现sucessful字样就表示成功了我解释一下填写的信息:DataSourceName:缩写就是DSN,中文翻译过来就是数据源名称,就是给数据源取个名,为了安全还是取英文名吧,省得出现意外。Description:描述,可填可不
本文标题:57VC连接MySQL
链接地址:https://www.777doc.com/doc-4501971 .html