让你提前认识软件开发(20):如何在C语言里面执行SQL语句?

第1部分 重新认识C语言

如何在C语言里面执行SQL语句?


【文章摘要】

        在通信类软件中,程序经常需要与数据库打交道。为了实现诸如从数据库中获取数据、更新数据库表某字段、插入或删除某条数据等功能,就需要在C语言程序中构造一些SQL语句,并用函数来执行这些SQL语句。

        本文介绍如何在C语言程序中构造并执行SQL语句,为相关软件开发工作的开展提供了参考。

【关键词】

         SQL语句  C语言  程序  流程  开发

 

一、为什么要在C语言程序中执行SQL语句?

        在C语言程序中执行SQL语句的原因有以下几个:

        (1) 程序需要获取数据库中某数据表的字段值,并对这些字段值进行解析以执行后续操作。

        (2) 程序需要更新数据库中某数据表的字段值。

        (3) 程序需要向某数据表中插入值。

        (4) 程序需要从某数据表中删除一些值。

        (5) 程序需要执行某存储过程以完成特定的操作。

        可以看出,在C语言程序中,不只要求能够执行“select”、“update”、“insert”、“delete”等语句,还要求能够执行存储过程。

 

二、C语言程序与数据库打交道的方式

        C语言程序与数据库打交道的方式分为直连(同步)和非直连(异步)两种,它们的特点如下所示:

        1. 直连方式

        在该方式中,C语言程序直接与数据库进行消息的交互,如图1所示。

图1 直连方式示意图

        该方式的优点是消息交互是即时的,C语言程序向数据库发送消息之后,很快就能够得到结果;缺点是如果数据库执行缓慢,那么C语言程序需要挂在那里等待结果,影响了程序执行效率。

 

         2. 非直连方式

        在该方式中,C语言程序通过一个独立的第三方模块间接与数据库进行消息的交互,如图2所示。

图2 非直连方式示意图

        该方式的优点是当C语言程序向第三方模块发送消息之后,可以不用等待数据库返回结果而去执行其它流程;缺点是如果消息序列号没有定义好,那么极有可能会导致第三方模块返回的结果出现混乱。因此,在该方式中,定义好发送消息的顺序(即设定好序列号)很重要。

       由于需要与数据库打交道,因此要在C语言程序所使用的配置文件中填写好关联数据库的相关信息,如数据库机器的IP地址、端口号、用户名、密码、模块号和所操作的具体数据库名等。在运行程序之前,一定要确保相关配置项信息的正确性。

 

       本文介绍直连方式下C语言程序与数据库进行消息交互的具体流程。

 

三、直连方式下的消息交互流程

        在直连方式下,C语言程序与数据库进行消息交互的通用流程如图3所示。

图3 直连方式下的消息交互流程图

 

        从图3可以看出,直连方式下C语言程序与数据库进行消息交互的流程一般包括以下几个步骤:

        (1) 获取对应的数据库连接,在连接失败的情况下进行重试。要执行SQL语句,首先需要连接到对应的数据库,即获取对应的数据库连接句柄。在第一次连接失败的情况下,要进行重连。每个项目组规定了数据库重连的次数,一般为二到三次。如果多次重连之后仍然不成功,那么程序就直接返回错误,不再执行后续流程。这时就需要查找连接失败的原因。

        (2) 在连接成功之后,就要构造特定的SQL语句并调用函数执行该SQL语句。这些SQL语句不仅包括“select”、“update”、“insert”、“delete”等语句,还包括执行存储过程的语句。如果执行成功,则继续执行后续流程;如果执行失败,则关闭对应的数据库连接并退出程序。因为之前连接数据库是成功的,所以本步执行失败,就需要查看是否是SQL语句构造得有问题。

        (3) SQL语句执行成功之后,如果该SQL语句有返回结果,就需要调用函数来获取该结果,同时对结果进行解析;如果该SQL语句没有返回结果,那么就直接执行后续流程。如果获取和解析结果失败,则关闭对应的数据库连接并退出程序;如果解析成功,那么就继续执行后续流程。

        (4) 注意,如果一个程序里面创建过数据库连接,在该程序执行结束或退出之前,一定要记得将数据库连接关闭掉,防止数据库连接句柄被错误使用。

 

四、直连方式下的C语言程序框架

       根据图3的消息交互流程,直连方式下的C语言程序框架如下所示:

……

……

// 获取对应的数据库连接

if (hDbConn == NULL)                // hDbConn为数据库句柄

{

    hDbConn = GetDBConn(…);        // 第一次连接

    if (hDbConn == NULL)            // 连接失败,再重试一次

    {

        hDbConn = GetDBConn(…);    // 第二次连接

        if (hDbConn == NULL) // 第二次连接失败,程序直接返回,不执行后续流程

        {

            return;

        }

    }

}

 

// 构造特定的SQL语句并调用函数执行该SQL语句

……

……

iRetValue = ExecuteSql(hDbConn, szSQL, …);  // szSQL里面存放特定的SQL语句

if (iRetValue == -1)            // 返回值为-1表示执行失败

{

    if (hDbConn != NULL)     // 数据库连接句柄不为空

    {

        CloseDb(hDbConn);   // 关闭数据库连接

        hDbConn = NULL;    // 注意,要把hDbConn指针置为空

    }

    return;                   // 执行失败后直接返回

}

 

// 如果该SQL语句有返回值,就需要获取该结果;无返回值则不需要执行以下流程

iRetValue = Fetch(hDbConn, szDBBuf, sizeof(szDBBuf)); // 将返回结果放到szDBBuf中

if (iRetValue == -1)           // 返回值为-1表示执行失败

{

    if (hDbConn != NULL)    // 数据库连接句柄不为空

    {

        CloseDb(hDbConn);  // 关闭数据库连接

        hDbConn = NULL;   // 注意,要把hDbConn指针置为空

    }

    return;                  // 执行失败后直接返回

}

 

// 继续执行后续流程

……

……

// 在程序返回之前要再次检查并关闭数据库句柄

if (NULL != hDbConn)

{

    CloseDb(hDbConn);

    hDbConn = NULL;

}

 

return;

 

五、总结

        本文对直连方式下C语言程序如何与数据库进行消息交互作了详细的介绍,并结合流程图展示了直连方式下的C语言程序框架。

        在C语言程序与数据库打交道的过程中,我们要注意以下问题:

        (1) 获取数据库连接句柄之后,在使用它之前要首先检查该句柄指针是否为空;如果为空,则要对数据库进行重连。

        (2) 在执行SQL语句的过程中,如果遇到异常结果,可从两个方面入手来检查:第一,检查配置文件中数据库的各项配置是否正确,数据库本身是否运行良好;第二,检查C程序代码是否书写正确,特别是SQL语句是否书写正确。

        (3) 不管在代码的什么位置,在程序退出之前,一定要释放数据库连接的句柄,以免其被误用。

 

        在实际的软件开发项目中,C语言程序和数据库打交道可谓是家常便饭。本文介绍了C语言程序与数据库交互的具体流程,为相关软件开发工作的顺利开展提供了有益的参考。

 

 

(欢迎访问南邮BBS:http://bbs.njupt.edu.cn/)
(欢迎访问重邮BBS:http://bbs.cqupt.edu.cn/nForum/index)

(本系列文章每周更新两篇,敬请期待!本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)

时间: 2024-08-30 11:36:17

让你提前认识软件开发(20):如何在C语言里面执行SQL语句?的相关文章

提前认识软件开发(1) 序言

序言 正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程. 1.为什么要写作本系列? 在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要. 在学校里面,我们欠缺的教育主要包括以下方面: 第一,对编码规范的要求.计算机编程课上,老师只要求学生能够编写程序实现既定的功能即可,几乎不会对编码规范提出要求,

让你提前认识软件开发(1):序言

序言           正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程.          1.为什么要写作本系列?        在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要.        在学校里面,我们欠缺的教育主要包括以下方面:        第一,对编码规范的要求.计算机编程

提前认识软件开发(12) 配置文件读取及文件操作

在通信领域的软件开发项目中,C语言是主流的编程语言,而文件操作在其中又占有很重要的地位.此外,为了体现产品的灵活性,可添加配置文件对某些重要的参数进行按需配置.这就要求程序能够准确读取到各个配置项的值. 本文以一个实际的小软件为例,介绍了C语言中配置文件的读取方法和重要的文件操作函数的使用方法,为相关软件开发项目提供了有益的参考. 1.前言 在一般的软件项目中,常常需要用C语言对文件进行操作.在诸如对账之类的程序中,尤其如此.而C语言中有关文件操作的函数多达数十种,熟悉常用函数(如fopen.f

请大家帮忙-实现使用C#语言,在.net开发平台中执行sql语句

问题描述 实现使用C#语言,在.net开发平台中执行sql语句 实现使用C#语言,在.net开发平台中执行sql语句了,如查询某张表数据,向某张表插入一条数据,在某张表中编辑一条数据,删除某张表的一条数据. 解决方案 给你段代码,你参考一下 using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.W

提前认识软件开发(33) 数据操纵语言(DML)

数据操纵语言(Data Manipulation Language,DML)包括insert.delete和update语句,用于增.删.改数据. 本文用以下的表tb_employeeinfo作为例子加以说明: create table tb_employeeinfo ( employeeno varchar(20) not null, -- 员工工号 employeename varchar(20) not null, -- 员工姓名 employeeage int null -- 员工年龄

提前认识软件开发(16) 如何对程序进行优化

对程序进行优化,是软件开发工程师必然会涉及到的问题.那么为什么要对程序进行优化呢?原因有以下几个: 第一,在原程序基础之上新增.删除或修改了功能,需要改变原程序流程.客户需求随时可能会变化,今天已经实现的功能,说不定明天就要修改或去掉.落实到程序上面,就需要我们随时准备对写好的代码进行修改,而不要奢望写好之后就永远不要动了. 第二,原程序有bug.这类情况出现得非常的频繁,很多软件有1.0.2.0.3.0等版本,部分原因就是前面版本中程序有问题,在修改程序的过程中使得软件版本不断升级. 第三,原

让你提前认识软件开发(19):C语言中的协议及单元测试示例

第1部分 重新认识C语言 C语言中的协议及单元测试示例   [文章摘要]         在实际的软件开发项目中,经常要实现多个模块之间的通信,这就需要大家约定好相互之间的通信协议,各自按照协议来收发和解析消息.        本文以实际的程序代码为例,详细介绍了如何用C语言来实现通信协议,并基于对协议字段的判断,说明了程序单元测试的过程,为相关的开发工作提供了有益的参考. [关键词]        软件开发  协议  单元测试  C语言  字段   一.软件模块之间的协议         什么

让你提前认识软件开发(15):程序调试的利器—日志

第1部分 重新认识C语言 程序调试的利器-日志           如果世界上有一个人能够保证一次写出来的代码是百分之百正确的,那么毫无疑问,他一定是世界上最优秀的程序员,没有之一.为什么要求代码写好过后要进行充分的自测(包括单元测试和集成测试)?就因为是人皆会犯错,是程序就会有bug.作为一名软件开发人员,必须要学会对程序进行测试,也就是要学会程序的调试.          一般而言,对代码的调试有以下几种方法:         第一,凭肉眼看.在开发阶段,我们编写的每一行代码都需要用我们的"

让你提前认识软件开发(47):同行评审

第3部分 软件研发工作总结 同行评审            在<浪潮之巅>这本书中,吴军老师描述了在Google早期的工作方式,其中有一段是这么写的:我一般会在吃完晚饭后把代码修改的清单发给克雷格做代码审核,他一般晚上10点左右会回复我,给我修改意见,详细到某一行多了一个空格.         吴军老师所描述的内容,其实就是软件开发中的同行评审流程.         几乎在所有的软件项目中,都需要同行评审.一个人不管能力多强,看问题的角度总会受到限制,写出来的程序和文档等定不会是十全十美的.如