现在的位置: 首页 > 综合 > 正文

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

2018年02月21日 ⁄ 综合 ⁄ 共 3948字 ⁄ 字号 评论关闭

用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 auths
	WHERE 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=full
userid=ucs/ucs@ucs
code=cpp

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

抱歉!评论已关闭.