C连接MySQL数据库实现数据互通cpp链接mysql

C 使用 mysql.h 库直接连接到 MySQL。

vc++连接MYSQL数据库

坦白讲,使用 MySQL CAPI 进行开发其实很简单,但是有一些要点需要注意。
我们先来说说最重要的事情。
CAPI是一个纯C接口。
如果要在Visual C++中调用,必须将MySQL头文件路径(c:\mysql\include)和库文件路径(c:\mysql\lib\libmysql.lib)添加到你的工程配置中,并将动态链接库libmysql.dll复制到你的系统目录(例如winnt\sys3 2 )。
我去年跑的一个项目中,编译时找不到mysql_init符号,因为没有添加库路径,纠结了好久。
说实话,我很困惑。

另一件非常重要的事情是检查API函数的返回值。
例如mysql_real_connect如果连接失败则直接返回NULL。
应立即检查并关闭初始化的 MYSQL 结构。
否则会发生内存泄漏。
去年我有一个项目,由于忘记检查返回值,系统偶尔崩溃。
我花了很长时间才了解这个细节。
还有另一个重要的细节。
mysql_store_result 将整个结果集直接加载到内存中。
如果数据量很大(例如3 000级),该过程将停止。
将其替换为mysql_use_result 效率更高。

一开始我以为CAPI操作特别复杂,后来发现大部分功能都是对标准C函数的封装。
例如,使用mysql_fetch_row逐行读取数据,实际上与C标准库中使用malloc/free类似。
等等,还有一张纸条。
请记住,使用结果集后,必须调用 mysql_free_result 来释放内存。
否则,进程资源将逐渐耗尽。
很多人不注意这一点。

也就是说,CAPI的性能最好,但使用起来稍微复杂一些。
确保编译和部署时没有遗漏任何dll文件。
我认为值得一试,尤其是在性能要求非常高的场景下。

用c语言怎么连接数据库呢?

你好,你提到的这两点,我在使用 ODBC 时确实遇到了很多陷阱。

关于配置ODBC数据源,我记得去年在公司服务器上做过。
这确实是个问题。
我们的环境是Windows Server 2 01 6 ,系统管理员老王准备了一个名为“HRData”的数据源。
但是我这里写程序的时候总是连接不上。
后来发现我忘记在本地注册这个数据源了。
Windows 中有一个“数据源 (ODBC)”图标。
单击它可以查看系统数据源、用户数据源和文件数据源。
我花了一个下午把服务器上老王配置的数据源复制到我的开发电脑上,终于搞定了。
请记住,您不能跳过此步骤。
如果无法连接数据源,剩下的都是白费力气。

然后使用SQL函数进行连接。
我看了你发布的代码,它非常标准。
但是当我在一台旧的Windows XP机器上使用这个时,该环境版本总是出现问题。
我记得那是2 007 年,我们还在使用Visual Studio 2 005 连接MySQL数据库。
当代码开始运行时,它就卡在那里了。
检查了半天日志,发现是SQLSetEnvAttr这一步环境版本设置错误。
MySQL ODBC 驱动程序需要版本 5 .0。
我把它设置为3 .0,所以当然不行。
最后我换了驱动,重新编译,就解决了。
因此在连接之前,请确保您的 ODBC 驱动程序和环境版本匹配。
我还发现,如果数据库名称、用户名和密码中有空格,使用 SQLConnect 的人会直接崩溃。
所以要来回检查多次字符串参数,空格等都要处理。

你的代码看起来不错,但是当你实际使用它时,你需要考虑到:
1 .数据源名称、用户名、密码:不要包含空格或特殊字符,尤其是非 ASCII 字符。
2 . SQL语句:运行前多运行几次,确保语法正确。
我看到有人输入了拼写错误,例如在哪里输入了哪个,并且数据库在运行时报告了错误,认为这是我的程序的问题。
3 . 缓冲区绑定:在代码的queryData[i-1 ]部分,确保i的值与您要查询的列号匹配,并且缓冲区大小足够。
有一次,当我检查文本字段时,缓冲区设置得太小。
结果,数据被截断,显示不完整。
我查了很久也没发现问题。
4 . 释放句柄:正如您所注意到的,释放顺序很重要。
我以前先发出hstmt,但是有一次连接不上的时候,发现hdbc也没有了。
后来发现顺序颠倒了,导致资源无法正确释放。
因此,记得先松开最里面的手柄,然后再向外松开。

一般来说,对于 ODBC,您需要小心配置和编码。
环境、驱动、数据源、SQL语句、缓冲区的任何问题都可能导致连接失败或数据混乱。
如果你参考我这些年踩坑的经验,应该可以少走一些弯路。