梦回从前 發表於 2025-4-26 15:41:00

C语言操作数据库

<h1 id="基于c语言的控制数据库脚本">基于C语言的控制数据库脚本</h1>
<h2 id="开发环境基础">开发环境基础</h2>
<p>编译器:Visual Studio Community 2022<br>
数据库:MySQL 8.0.37 Community</p>
<h2 id="前戏准备">前戏准备</h2>
<ol>
<li>复制文件和路径<br>
找到MYSQL的安装目录</li>
</ol>
<ul>
<li>复制“lib文件夹里的libmysql.dll文件”<br>
例:<br>
<img src="https://img2024.cnblogs.com/blog/3636053/202504/3636053-20250426145303821-375080210.png" alt="" loading="lazy"></li>
<li>复制目录下include和lib两个文件夹的路径<br>
例:<br>
D:\MySQL\include<br>
D:\MySQL\bin</li>
</ul>
<ol start="2">
<li>VS环境配置</li>
</ol>
<ul>
<li>在Visual Studio 2022新建空项目</li>
<li>项目-&gt;属性-&gt;配置属性-&gt;VC++目录-&gt;分别将include和lib文件夹的路径添加到包含目录和库目录<br>
<img src="https://img2024.cnblogs.com/blog/3636053/202504/3636053-20250426150201394-89227051.png" alt="" loading="lazy"></li>
</ul>
<ol start="3">
<li>文件导入<br>
将libmysql.dll文件粘贴到Visual Studio 2022项目文件夹下<br>
例:<img src="https://img2024.cnblogs.com/blog/3636053/202504/3636053-20250426150826375-374182279.png" alt="" loading="lazy"></li>
</ol>
<h2 id="代码编写">代码编写</h2>
<pre><code class="language-C">#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include &lt;winsock.h&gt;
#include &lt;mysql.h&gt;
#pragma comment (lib, "libmysql.lib")

int main()
{
        //变量定义
        MYSQL* conn; //数据库连接句柄
        MYSQL_RES* res; //执行数据库语言结果
        MYSQL_ROW row; //存放一个数据记录
        char* server = "localhost";//本地连接
        char* user = "root";//
        char* password = "123456";//mysql密码
        char* database = "mysql_test";//数据库名
        char* query = "select * from student";//需要查询的语句
        int t;

        conn = mysql_init(NULL); //句柄初始化

        //尝试连接到数据库
        if (!mysql_real_connect(conn, server, user, password, database, 3306, NULL, 0))//判断是否连接成功
        {
                printf("Error connecting to database:%s\n", mysql_error(conn));
        }
        else
        {
                printf("Connected...\n");
        }

        //字符编码,解决乱码
        if (!mysql_set_character_set(conn, "gbk"))
        {
                printf("New client character set: %s\n",
                        mysql_character_set_name(conn));
        }

        //调用API根据用户输入的Query对数据库操作
        if (mysql_query(conn, query))
        {
                printf("Error making query:%s\n", mysql_error(conn));
        }
        else
        {
                printf("Query made...\n");
                res = mysql_use_result(conn);        //获取结果
                if (res)
                {
                        while ((row = mysql_fetch_row(res)) != NULL)
                        {
                                //printf("num=%d\n",mysql_num_fields(res));//列数
                                for (t = 0; t &lt; mysql_num_fields(res); t++)
                                        printf("%8s ", row);
                                printf("\n");
                        }
                }
                mysql_free_result(res);   //释放res占用的内存空间
        }
        mysql_close(conn); //断开数据库
        //system("pause");
        return 0;
}
</code></pre>
<h2 id="mysql搭建测试数据库">MYSQL搭建测试数据库</h2>
<ol>
<li>新建测试数据库</li>
</ol>
<pre><code class="language-SQL">drop database if exists mysql_test cascade;
create database mysql_test;
use mysql_test;
</code></pre>
<ol start="2">
<li>创建学生表</li>
</ol>
<pre><code class="language-SQL">create table student (
        s_id int,
        s_name varchar(8),
        s_birth date,
        s_sex varchar(4)
);
</code></pre>
<ol start="3">
<li>插入学生数据</li>
</ol>
<pre><code class="language-SQL">insert into student values
(1,'赵雷','1990-01-01','男'),
(2,'钱电','1990-12-21','男'),
(3,'孙风','1990-05-20','男'),
(4,'李云','1990-08-06','男'),
(5,'周梅','1991-12-01','女'),
(6,'吴兰','1992-03-01','女'),
(7,'郑竹','1989-07-01','女'),
(8,'王菊','1990-01-20','女');
</code></pre>
<h2 id="代码测试">代码测试</h2>
<ol>
<li>
<p>编译<br>
生成-&gt;重新生成解决方案<br>
出现:“全部重新生成:1成功,0失败,0已跳过”即编译完成,无错误<br>
<img src="https://img2024.cnblogs.com/blog/3636053/202504/3636053-20250426153012707-596291390.png" alt="" loading="lazy"></p>
</li>
<li>
<p>调试<br>
-&gt;按下调试按钮F5<br>
运行成功,如图所示<br>
<img src="https://img2024.cnblogs.com/blog/3636053/202504/3636053-20250426153318515-976927900.png" alt="" loading="lazy"></p>
</li>
<li>
<p>报错</p>
</li>
</ol>
<ul>
<li>错误<br>
编译时出现C2440,E0144这两个报错代码</li>
<li>解决办法<br>
项目-&gt;属性-&gt;C/C++-&gt;语言-&gt;符合模式-&gt;将“是”改为“否”</li>
</ul><br><br>
来源:https://www.cnblogs.com/stuckpufferfish/p/18848066
頁: [1]
查看完整版本: C语言操作数据库