Pro C/C++ 和 vs2010开发环境融合

来源:互联网 发布:php外链程序 编辑:程序博客网 时间:2024/06/08 03:59

用C/C++访问oracle数据库,Pro C/C++因为使用简单,开发快捷一般是程序员的首选。本文将介绍如何将ProC/C++预编译工具集成到微软vs2010中,整个介绍的线索是围绕着如何将一个简单访问oracle的应用付诸于实践,如果最后这个应用运行起来了,那就证明成功了。废话少说,让我们一起来动手实践吧。

第一步:安装oracle的客户端,注意在安装过程中选择Pro C/C++开发包。

安装完检查一下几个目录和文件:

C:\oracle\product\11.1.0\client\precomp\lib

C:\oracle\product\11.1.0\client\precomp\public

第二步:在数据库创建一张表; 为了测试使用。

CREATE TABLE auths(AUTHOR_CODE VARCHAR2(8) NOT NULL,NAME VARCHAR2(10),BIRTHDATE DATE,ENTRY_DATE_TIME DATE,SALARY NUMBER(7,2),remark VARCHAR2(255))

第三步:准备好一段使用Pro C/C++访问数据库的源代码,下边这段是我在网上找到的,不知道是否侵犯版权,如果作者看到有异议,请联系我。

/* exam01.pc 开发Oracle接口程序举例 *//* 说明:本程序介绍用PROC开发Oracle库接口的编程特点。通过向AUTHS* 表输入作家代码,查询作家姓名及工资。运行前应建表、插入数据并提交。*/#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sqlca.h>/* 包含SQL通讯区,它用于处理错误。*/void connect(); /* 连接到Oracle Server */void disconnect(); /* 断开到Oracle Server的连接 */void sql_error(char *); /* 处理错误句柄 */void select(); /* 查询子程序 */extern "C" int sqlglm(char *,int *,int *);/* 主程序 */void main(int argc, char* argv[]){/* 安装错误处理句柄 */EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle错误--\n");/* 连接到数据库 */connect();/* 执行查询 */select();/* 断开数据库连接 */disconnect();system("pause");return;}/* 子程序 *//* 连接子程序 connect() */void connect(){EXEC SQL BEGIN DECLARE SECTION;VARCHAR username[10], password[10], server[10];EXEC SQL END DECLARE SECTION;/* 输入用户名、口令以及服务器名 */printf("\n输入用户名:");gets_s((char*)username.arr, 10);username.len=(unsigned short)strlen((char *)username.arr);printf("\n输入口令:");gets_s((char*)password.arr, 10);password.len=(unsigned short)strlen((char *)password.arr);printf("\n输入服务器名:");gets_s((char*)server.arr, 10);server.len=(unsigned short)strlen((char *)server.arr);/* 连接到Oracle服务器上 */EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;printf("\n以用户%s成功地连接到了服务器%s上!\n", username.arr, server.arr);}/* 断开连接子程序 disconnect() */void disconnect(){char temp[10];printf("\n是否在断开连接前提交所有事务? (Y/N)");gets_s(temp, 10);if(strcmp(temp ,"Y") == 0){  /* 回退事务,断开连接。 */  EXEC SQL ROLLBACK WORK RELEASE;  printf("\n回退事务,断开连接,退出程序!\n\n");}else{  /* 提交事务,断开连接。 */  EXEC SQL COMMIT WORK RELEASE;  printf("\n提交事务,断开连接,退出程序!\n\n");  exit(1);}}/* 查询子程序 select()* 首先输入作家代码,然后查询作家姓名和工资。*/void select(){EXEC SQL BEGIN DECLARE SECTION;char author_code[8], name[10];float salary;short salary_ind;EXEC SQL END DECLARE SECTION;printf("\n输入作家代码: ");gets_s(author_code, 8);/* 查询作家姓名和工资 */EXEC SQL SELECT name, salary INTO :name, :salary:salary_ind FROM authsWHERE author_code = :author_code;/* 根据指示变量的值来确定该作家的工资是否为空。*/if (salary_ind ==0){printf("\n作家代码\t作家姓名\t作家工资\n");printf("--------\t--------\t--------\n");printf("%8s\t%8s\t%8.2f\n", author_code, name, salary);}else{printf("作家%s的工资未录入,为空值!\n", name);}}/* 错误处理子程序 sql_error() */void sql_error(char *msg){char err_msg[128];size_t buf_len, msg_len;/* 出现SQL错误,继续往下执行。 */EXEC SQL WHENEVER SQLERROR CONTINUE;printf("\n%s\n", msg);buf_len=sizeof(err_msg);/* 调用函数sqlglm()获得错误消息。 */sqlglm(err_msg, (int*)&buf_len, (int*)&msg_len);printf("%.*s\n", msg_len, err_msg);/* 回退事务,断开连接,退出程序。 */EXEC SQL ROLLBACK RELEASE;exit(EXIT_FAILURE);}

第四步:生成vs2010的工程和先关文件:

先把这段Pro C/C++代码贴到一个文件中,例如我把这段代码贴到一个叫proc.pc的文件中,然后利用vs2010生成一个windows console类型的空工程中,把proc.pc文件加入到这个工程中来,同时在该工程中生成另外一个proc.cpp的空文件,这样该工程中就包括两个文件了,一个是proc.pc,另外一个是proc.cpp文件,其中Proc.cpp文件内容是空的。这两个文件最好保持名称一致,唯一不同的仅是文件的扩张名不同,一个是 *.pc 文件,另外一个是 *.cpp文件。

第五步:配置vs2010的开发环境:

在工程中的 Solution Explorer 找到 proc.pc 文件,然后代开这个文件Property page页,如下图所示:

 

设置 Excluded From Build 选择 NO, Item Type 选择 Custom Build Tool,然后选择(Apply)应用,使之生效。

生效之后,就会出现如下页面,

将 Command Line 设置为: proc %(FullPath)

    Outputs 设置为:    %(FullName).cpp

    然后确定即可,关闭该页面。

 第六步:配置该工程的目录选项:

Executable Directory 包括 oracle 提供的预编译工具 proc.exe所在的目录,本人的测试环境是: C:\oracle\product\11.1.0\client\BIN;

Include Directory 包括 oralce 的 proc 头文件所在目录,本人的测试环境是:

C:\oracle\product\11.1.0\client\precomp\public

Library Directory 包括 Oralce 提供的连接库 orasql11.lib 所在的目录,本人的测试环境是:

C:\oracle\product\11.1.0\client\precomp\LIB

如下图所示:

 第七步:配置该工程的连接选项:

因为最后链接的时候要使用oracle提供的链接库,所以要进行链接配置,链接的文件名称为 orasql11.lib,不同版本的oracle该文件名可能不同,请链接的时候注意.

第八步:修改proc 预编译时候的先关编译参数.

修改文件C:\oracle\product\11.1.0\client\precomp\admin\pcscfg.cfg,内容如下:

define=(WIN32_LEAN_AND_MEAN)sqlcheck=fulluserid=ucs/ucs@ucscode=cpp

其中userid 要修改为你自己链接数据库的连接串。最后就可以编译运行了,但愿你不怕麻烦一步一步认真执行下来,那大家一起欣赏一下我的运行界面吧。