动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.Oracle数据库 ASM 功能方法的说明.
.关于Java开发中使用Oracle数据库.
.一个存储过程,关于blob.
.在Oracle中实现数据库的复制.
.Red Hat 7.2/7.3 中文字体设置工.
.安装Oracle9i失败后,一定要重装系.
.常用的档案, 与它们的延伸名称, .
.ORACLE在HP-UX下的系列问题处理(.
.如果你想成为一名DBA.
.Linux下架设FTP.
.关于logmnr的相关的表.
.将oracle设为归档模式启动的方法.
.RedHat Linux下Oracle启动脚本的.
.Oracle数据库系统使用经验六则.
.大型数据库信息排错一法.
.如何选择Oracle优化器.
.Oracle 10G在Sun Solaris下单机安.
.Oracle诊断案例-SGA与Swap之二.
.Qmail日志中为什么会出现“CNAME.
.象使用数组一样使用一个数据表变.

用 VC 开 发 Oracle 数 据 库 应 用 程 序

发表日期:2008-2-9 |



  ____Oracle公司于1997年推出的Oracle 8数据库以其支持大数据库、多用户的高性能事务处理、支持业界各项工业标准、完整的安全和完整性控制、支持分布式数据库和分布处理,具有可移植性、可兼容性和可连接性等突出优点倍受用户喜爱。 而在客户端的开发工具方面,Visual C++也因其强大的功能和高度的灵活性等特点深受广大程序员的喜爱。本文旨在介绍使用Visual C++开发基于Oracle数据库应用程序的两种方法。
  
  ____使用PRO*C开发数据库应用
  
  ____1.PRO*C工作原理
  
  ____PRO系列是Oracle公司提供的在第三代高级程序设计语言中嵌入SQL语句来访问数据库的一套预编译程序,包括PRO*Ada、PRO*C、PRO*COBOL、PRO*Fortran、PRO*Pascal和P RO*PL/I六种。程序员用相应的高级语言编写嵌入SQL语句的PRO源程序(若用C语言则称为 PRO*C源程序),然后运行相应的预编译程序,把嵌入的SQL语句转换为标准的Oracle调用并生成目标源程序,即纯高级语言格式的源程序,最后将这些源程序加入用户的程序中调用 (其处理过程如下图)。
  
  
  
  图1
  
  ____Oracle预编译程序提供如下功能:
  
  ____能用六种通用的高级程序设计语言中的任何一种编写应用程序。
  
  ____遵循ANSI标准,在高级语言中嵌入SQL语句。
  
  ____可采用动态SQL方法,让程序在运行时接受或构造一个有效的SQL语句。
  
  ____实现Oracle内部数据类型和高级语言数据类型之间的自动转换。
  
  ____可通过在应用程序中嵌入PL/SQL事物处理块来改进性能。
  
  ____能在程序行和命令行上指定所需要的预编译可选项,并可在预编译的过程中改变它们的值。
  
  ____能全面检查嵌入的SQL数据操纵语句和PL/SQL块的文法和语义。
  
  ____可用SQL*Net并行存取多个地点的Oracle数据库。
  
  ____可把数组作为输入和输出程序变量使用。
  
  ____能对应用程序中的代码段进行条件预编译。
  
  ____提供了较强的异常处理功能。
  
  ____由此可见,通过预编译程序与其它高级语言的结合,既可以利用SQL强有力的功能和灵活性为数据库应用系统的开发提供强有力的手段,又可以充分利用高级语言自身在系统开发方面的优势,从而提供一个完备的基于Oracle数据库应用程序的开发解决方案。
  
  ____2.在VC中使用PRO*C
  
  ____每个PRO*C源文件一般由程序头和程序体两部分组成。程序头包含宿主变量(SQL语句中所包含的变量)说明、通讯区定义和C外部表示符的说明等。程序体一般是由若干函数组成,这些函数内含有SQL语句(以EXEC SQL起头的语句)。
  
  ____PRO*C支持的数据类型包括:VARCHAR2(变长字符串)、NUMBER(二进制数)、INTGER(有符号整数)、FLOAT(浮点数)、STRING(以NULL结尾的字符串)、VARNUM(变长二进制数)、 LONG(变长字符串)、VARCHAR(变长字符串)、ROWID(二进制值)、DATE(定长日期/时间值 )、VARRAW(变长二进制数据)、RAW(定长二进制数据) 、LONGRAW(变长二进制数据)、UN SIGNED(无符号整数)、LONGVARCHAR(变长字符串)、LONGVARRAW(变长二进制数据)、CHA R(定长字符串)、CHARZ(C中定长以NULL结尾的字符串)、MLSLABEL(变长二进制数据)。
  
  ____在PRO*C中不能使用‘l’或‘u’作词尾或‘0x’作词头修饰常量;在SQL语句中使用单引号来定义字符串,用双引号来定义非凡的或小写字符的标识符(如表名等);SQL语句中不答应使用C中的寻址、间接、位逻辑、复合赋值、?=、--、++、%、<<、>>操作符,并且用NOT、AND、OR、=来分别代替!、&&、、==。
  
  ____下面的程序是一个连接数据库的PRO*C源程序例子。
  
  ____#include //声明SQL通讯区
  
  ____#include
  
  ____#include
  
  ____EXEC SQL BEGIN DECLARE SECTION;
  
  ____VARCHAR username[20]; //声明宿主变量
  
  ____VARCHAR passWord[20];
  
  ____VARCHAR dbname[20];
  
  ____EXEC SQL END DECLARE SECTION;
  
  ____void db_connect()
  
  ____{
  
  ____strcpy((char *)username.arr,"SCOTT");
  
  ____username.len = strlen((char *)username.arr);
  
  ____strcpy((char *)password.arr,"TIGER");
  
  ____password.len = strlen((char *)password.arr);
  
  ____strcpy((char *)dbname.arr,"SUNDB");
  
  ____dbname.len = strlen((char *)dbname.arr);
  
  ____EXEC SQL WHENEVER SQLERROR STOP;
  
  ____//隐式异常处理
  
  ____EXEC SQL CONNECT :usernameIDENTIFIED BY :password USING :dbname;
  
  ____/*if (sqlca.sqlcode != 0) //显式异常处理
  
  ____{
  
  ____AfxMessageBox("\n与 Oracle 数据库连接失败!");
  
  ____return;
  
  ____}*/
  
  ____}
  
  ____在VC中使用PRO*C时,先用PRO*C编写所需的操作数据库的子程序,再运行PRO*C预编译程序把PRO*C源程序转成相应的.CPP源程序,将该程序插入到用户工程文件中,并在需要对插入函数进行调用的模块中说明函数,然后就可以在此模块中调用所需的函数。

  
  ____使用ODBC中间件访问数据库
  
  ____1.ODBC工作原理
  
  ____ODBC是Open Database Connect(开放数据库互连)的简称,它是由Microsoft公司于1 991年提出的一个用于访问数据库的统一界面标准,是应用程序和数据库系统之间的中间件。它通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作,避免了在应用程序中直接调用与数据库相关的操作,从而提供了数据库的独立性。
  
  ____ODBC主要由驱动程序和驱动程序治理器组成。驱动程序是一个用以支持ODBC函数调用的模块(在WIN95下通常是一个DLL),每个驱动程序对应于相应的数据库,当应用程序从基于一个数据库系统移植到另一个时,只需更改应用程序中由ODBC治理程序设定的与相应数据库系统对应的别名即可。驱动程序治理器(包含在ODBC32.DLL中)可链接到所有ODBC 应用程序中,它负责治理应用程序中ODBC函数与DLL中函数的绑定。
  
  ____ODBC使用层次的方法来治理数据库,在数据库通信结构的每一层,对可能出现依靠数据库产品自身特性的地方,ODBC都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC一经推出就获得巨大成功的重要原因之一。
  
  ____从结构上分,ODBC分为单束式和多束式两类。
  
  ____单束式驱动程序
  
  图2
  
  ____单束式驱动程序介于应用程序和数据库之间,像中介驱动程序一样数据提供一个统一的数据访问方式。
  
  ____当用户进行数据库操作时,应用程序传递一个ODBC函数调用给ODBC驱动程序治理器, 由ODBC API判定该调用是由它直接处理还是送交驱动程序执行。
  
  ____可见,单束式驱动程序本身是一个数据库引擎,由它直接可完成对数据库的操作,尽管该数据库可能位于网络的任何地方。
  
  ____多束式驱动程序
  
  图3
  
  ____多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据,它本身并不执行数据处理操作,而用于远程操作的网络通信协议的一个界面。
  
  ____前端应用程序提出对数据库处理的请求,该请求转给ODBC驱动程序治理器,驱动程序治理器依据请求的情况,就地完成或传给多束驱动程序。多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如Oracle的SQLNet)所能理解的形式并交于接口去处理,接口把请求经网络传送给服务器上的数据引擎。服务器处理完后把结果发回给数据库通信接口 ,数据库接口将结果传给多束式ODBC驱动程序,再由驱动程序将结果传给应用程序。
  
  ____2.在VC中使用ODBC
  
  ____Visual C++中提供了CDatabase、CRecordset、CRecordView、CDBException和CFie ldExchange五个类,这些类封装了ODBC SDK函数,从而使用户可以无需了解SDK函数就可以很方便地操作支持ODBC的数据库。
  
  ____CDatabase类封装了与数据库建立连接、控制事务的提交和回滚及执行SQL语句的方法。
  
  ____CRecordset类封装了大部分操纵数据库的方法,包括浏览、修改记录、控制游标移动、排序等操作。
  
  ____CRecordView类提供了与Recordset对象相连接的视图,可以建立视中的控件与数据库数据的对应,同时支持移动游标、修改记录等操作。
  
  ____CDBException类提供了对数据库操作的异常处理,可以获得操作异常的相关返回代码。
  
  ____CFieldExchange类提供了用户变量与数据库字段之间的数据交换,假如不需要使用自定义类型,将不用直接调用该类的函数,MFC Wizard将自动为程序员建立链接。
  
  ____两种方法的比较
  
  ____综上所述,使用这两种方法在Visual C++中都可以很方便地开发出基于Oracle数据库的应用程序,同时,这两种方法又各有其优缺点。ODBC由于有MFC强大的类库支持而使得编程实现非常方便,同时可移植性也很强,在异构数据库之间移植也只需更改很少一部分程序。但是,由ODBC的实现机制我们可以看到,与PRO*C相比,应用程序需要经过ODBC驱动程序治理器和ODBC驱动程序两层,才能和数据库通信接口建立联系,而PRO*C是直接与通信接口联系,因此建立在ODBC上应用程序的执行效率会相对低一些。PRO*C具有执
上一篇:使用OLE对象访问Oracle数据库 人气:526
下一篇:ORACLE WEBDB Q 与 A 人气:684
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成