提前认识软件开拓(20) 如安在C语言内里执行SQL语句
副标题#e#
在通信类软件中,措施常常需要与数据库打交道。为了实现诸如从数据库中获取数据、更新数据库表某字段、插入或删除某条数据等成果,就需要在C语言措施中结构一些SQL语句,并用函数来执行这些SQL语句。
本文先容如安在C语言措施中结构并执行SQL语句,为相关软件开拓事情的开展提供了参考。
一、为什么要在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 直连方法下的动静交互流程图
#p#副标题#e#
从图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) 获取数据库毗连句柄之后,在利用它之前要首先查抄该句柄指针是否为空;假如为空,则要对数据库举办重连。
#p#分页标题#e#
(2) 在执行SQL语句的进程中,假如碰着异常功效,可从两个方面入手来查抄:第一,查抄设置文件中数据库的各项设置是否正确,数据库自己是否运行精采;第二,查抄C措施代码是否书写正确,出格是SQL语句是否书写正确。
(3) 不管在代码的什么位置,在措施退出之前,必然要释放数据库毗连的句柄,以免其被误用。
在实际的软件开拓项目中,C语言措施和数据库打交道可谓是屡见不鲜。本文先容了C语言措施与数据库交互的详细流程,为相关软件开拓事情的顺利开展提供了有益的参考。
From:csdn博客 周兆熊