pro*c/c++ 访问数据库,实现基本增删改查

pro*c 是oracle公司提供的专业的开发工具,是在C语言中嵌入sql语句,进行数据库开发.高效且容易掌握.

本篇介绍的是在windows下进行的pro*c编程.

1.先Proc工具的配置,装了oracle,系统就有proc工具.

首先安装oracle数据,安装完毕后配置环境变量,我的Porc工具在 D:\app\Administrator\product\11.1.0\db_2\BIN\proc.exe,将其配入PATH中,运行->cmd->.proc显示一下信息:
Pro*C/C++: Release 11.1.0.6.0 - Production on 星期五 10月 25 12:06:46 2013

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

系统默认选项值取自于:  D:\app\Administrator\product\11.1.0\db_2\precomp\admin\pcscfg.cfg

选项名称       当前值         说明
-------------------------------------------------------------------------------
auto_connect   否             允许自动连接到 ops$ 帐户
char_map       charz          正在映射字符数组和字符串
close_on_commit否             关闭所有 COMMIT 游标
cmax           100            用于连接池的 CMAX 值
cmin           2              用于连接池的 CMIN 值
cincr          1              用于连接池的 CINCR 值
ctimeout       0              用于连接池的 CTIMEOUT 值
cnowait        0              用于连接池的 CNOWAIT 值
common_parser  否             使用 Common SQL Front End 进行语法分析
code           ansi_c         所要生成的代码类型
comp_charset   multi_byte     C 编译器支持的字符集类型
config         default        使用另一配置文件覆盖系统配置文件
cpool          否             支持连接共享
cpp_suffix     *none*         覆盖默认的 C++ 文件名后缀
db2_array      否             支持 DB2 数组插入/选择语法
dbms           native         v6/v7/v8 兼容模式
def_sqlcode    否             生成 '#define SQLCODE sqlca.sqlcode' 宏
define         WIN32_LEAN_AND_定义预处理程序符号
duration       transaction    设置高速缓存中的对象的连接持续时间
dynamic        oracle         指定 Oracle 或 ANSI 动态 SQL 语义
errors         是             错误消息是否发送到终端
errtype        *none*         intype 文件错误的列表文件名
events         否             支持发布-订阅事件通知
fips           none           ANSI 不兼容用法的 FIPS 标志
header         *none*         指定预编译标头的文件扩展名
hold_cursor    否             控制游标高速缓存中的游标存留数
implicit_svpt  否             在缓冲的插入之前的隐式保存点
iname          *none*         输入文件的名称
include        *none*         所含文件的目录路径
intype         *none*         类型信息的输入文件名
lines          否             向生成的代码添加若干行指令
lname          *none*         覆盖默认列表文件名
ltype          none           在列表文件生成的数据量
maxliteral     1024           生成的字符串字面量的最大长度
maxopencursors 10             高速缓存的打开游标的最大数量
max_row_insert 0              要在插入时缓冲的最大行数
mode           oracle         代码对 Oracle 或 ANSI 规则的顺应性
native_types   否             本机浮点/双精度支持
nls_char       *none*         指定国家语言字符变量
nls_local      否             控制如何完成 NLS 字符语义
objects        是             支持对象类型
oname          *none*         输出文件的名称
oraca          否             控制 ORACA 的使用
outline        no             在其中创建大纲的类别 [yes/no/<category name>]
outlnprefix    *none*         大纲名称前缀
pagelen        80             列表文件的页长度
parse          none           控制对哪一 非 SQL 代码进行语法分析
prefetch       1              在游标 OPEN 时预先提取的行数
release_cursor 否             控制从游标高速缓存释放的游标数
runoutline     否             如果是, 则在数据库中创建大纲
select_error   是             控制选择错误的标志
sqlcheck       syntax         编译时 SQL 的检查量
stmt_cache     0              语句高速缓存的大小
sys_include    *none*         系统标头文件所在的目录
threads        否             表示多线程的应用程序
type_code      oracle         使用 Oracle 或动态 SQL 的 ANSI 类型代码
unsafe_null    否             允许不使用指示符表列的 NULL 提取
userid         *none*         用户名/口令 [@dbname] 连接字符串
utf16_charset  nchar_charset  由 UTF16 变量使用的字符集表单
varchar        否             允许使用隐式 varchar 结构
version        recent         要返回哪一版本的对象
win32_threads  否             支持 Windows 默认的本地线程
PCC-F-02135, CMD-LINE: 用户请求帮助

2.配置C/C++编译器,在此,我使用的是VC的编译器 CL.exe,安装了vc++6.0 或者 vs2005 vs2008 vs2010 vs2008的系统中,都会有CL编译器,LD连接器,make工具.

运行->cmd->nmake:

Microsoft (R) Program Maintenance Utility   Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.

NMAKE : fatal error U1064: MAKEFILE not found and no target specified
Stop.

出现以上信息,说nmake工具已经配置到系统的环境变量中了,如果没有配置,则将其路径加入path即可;

运行->cmd->cl:

Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

usage: cl [ option... ] filename... [ /link linkoption... ]

出现以上信息,说CL编译工具已经配置到系统的环境变量中了,如果没有配置,则将其路径加入path即可;

3.第一个pro*程序

 proc程序的扩展名使用.pc

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sqlca.h>

int main()
{	
	/*sql声明区*/
	exec sql begin declare section;
	char *user="hull";
	char *pass="000000";
	exec sql end declare section;	
	/*打开数据库连接*/
	exec sql connect :user identified by :pass;
	if(sqlca.sqlcode==0)
	{
		printf("打开数据库成功\n");
	}else
	{
		printf("打开数据库失败\n");
	}
	exec sql commit release;
}

使用proc 预编译  proc first.pc code=kr_c

使用cl编译器编译,但不链接 cl /I "D:\app\Administrator\product\11.1.0\db_1\precomp\public" /c /Tc first.c

最后执行链接 link first.obj orasql11.lib  /libpath:"D:\app\Administrator\product\11.1.0\db_1\precomp\LIB" /out:first.exe

完毕后生成 first.exe,第一个proc程序就完成了,可以成功链接到数据库.

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值