Por* C/C++编程思路:1、包含头文件 与开发C/C++应用程序相同,当编写Por* C/C++应用程序时,首先应该包含头文件。但是要注意,不仅需要包含C/C++的头文件,而且还需要包含Por* C/C++的头文件。当编写Por* C/C++应用程序时,一般需要包含以下C/C++头文件:stdio.h iostream.hstdlib.hstring.h除了需要包含C/C++头文件,开发人员还需要包含Por* C/C++头文件,其中头文件sqlca.h是必须包含的,并且在某些情况下还需要包含其他头文件,它们的作用如下:sqlca.h:定义了SQLCA结构,该结构用于与SQL语句执行交互操作sqlda.h:定义了SQLDA结构,当使用Oracle动态SQL方法四时,必须包含该结构oci.h:定义了所有OCI函数,当编写LOB应用,对象类型应用、集合类型应用时,必须包 含该结构sql2oci.h:定义了用于与OCI交互的SQLLIB函数。当嵌入OCI函数时,必须要包含该头文件。其他当编写Por* C/C++应用程序时,通过使用C预处理器指令#include可以包含系统(C/C++)头文件和Por* C/C++头文件。示例如下:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sqlca.h> 2、定义全局变量(可选)当编写Por* C/C++程序时,如果要定义所有函数都可以引用的宿主变量,那么要在包含了头文件之后,立即定义这些全局变量。全局宿主变量既可以直接定义,也可以使用定义部分定义。示例如下: EXEC SQL BEGIN DECLARE SECTION; char username[10],password[10],server[10]; EXEC SQL END DECLARE SECTION;3、定义外部函数(可选)当编写Por* C/C++程序时,有些情况下需要调用SQLLIB公用函数。例如,为了取得完整的Oracle错误消息,可能需要使用SQLLIB函数sqlglm()。在这种情况下,必须首先定义外部函数。示例如下: extern sqlglm(char*,int*,int*);4、定义函数为了开发模块化的程序,开发人员首先应该分析并确定应用需要实现的功能,然后将不同功能设计为不同的应用模块----函数,最终在每个函数中实现相应功能。通过使用函数,可以提高程序健壮性,便于开发与调试。为了使得函数之间可以相互调用,构成一个完整的整体,必须首先定义函数。例如,可以定义以下函数:connect():用于连接数据库sql_error():用于处理SQL错误select_employee():用于检索雇员数据库其他定义函数的示例如下: void connect(); void sql_error(); void select_employee();5、编写应用程序在Por* C/C++程序头部完成了以上任务之后,就可以根据要实现的功能编写应用程序了,在编写数据库应用程序时,应该按照以下步骤实现数据库访问:(1)安装错误处理句柄。错误处理句柄用于定位并处理SQL错误。如果不安装错误处理句柄,那么当应用程序出现SQL错误时,将无法确定具体的错误原因。为了正确地定位并处理SQL错误建议开发人员一定要编写并安装错误处理句柄。安装错误处理句柄的示例如下: EXEC SQL WHENEVER SQLERROR DO sql_error(); EXEC SQL WHENEVER NOT FOUND DO sql_error();当检测到SQL错误或不能处理检测到数据时,系统会自动调用错误处理程序sql_error()定位并处理SQL错误。错误处理子程序的示例如下: void sql_error() { printf("%.*s\n",sqlca.sqlerrm.sqlerrml,sqlca.sqlerrm.sqlerrmc); }(2)连接到数据库。当编写数据库应用程序时,在执行SQL操作之前必须首先连接到数据库。为了提高程序的可读性和可维护性,可以建立专门的函数来实现连接功能。示例如下: void connect() { printf("输入用户名:"); gets(username); printf("输入密码:"); gets(password); printf("输入网络服务名:"); gets(server); EXEC SQL CONNECT :usesrname IDENTIFIED BY :password UISNG :server; }3、执行SQL操作。在编写了数据库连接函数后,就可以编写各种用于执行SQL操作的函数了,可以编写函数,也可以直接在主函数main()中断开连接,断开连接是使用RELEASE子句实现的。示例如下: EXEC SQL COMMIT RELEASE;或 EXEC SQL ROLLBACK RELEASE;

评论