知识大全 用 VC 开 发 Oracle 数 据 库 应 用 程 序
Posted
数据库
篇首语:志不强者智不达,言不信者行不果。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用 VC 开 发 Oracle 数 据 库 应 用 程 序相关的知识,希望对你有一定的参考价值。
用 VC 开 发 Oracle 数 据 库 应 用 程 序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
____Oracle公司于 年推出的Oracle 数据库以其支持大数据库 多用户的高性能事务处理 支持业界各项工业标准 完整的安全和完整性控制 支持分布式数据库和分布处理 具有可移植性 可兼容性和可连接性等突出优点倍受用户喜爱 而在客户端的开发工具方面 Visual C++也因其强大的功能和高度的灵活性等特点深受广大程序员的喜爱 本文旨在介绍使用Visual C++开发基于Oracle数据库应用程序的两种方法 ____使用PRO*C开发数据库应用 ____ 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调用并生成目标源程序 即纯高级语言格式的源程序 最后将这些源程序加入用户的程序中调用 (其处理过程如下图) 图 ____Oracle预编译程序提供如下功能: ____能用六种通用的高级程序设计语言中的任何一种编写应用程序 ____遵循ANSI标准 在高级语言中嵌入SQL语句 ____可采用动态SQL方法 让程序在运行时接受或构造一个有效的SQL语句 ____实现Oracle内部数据类型和高级语言数据类型之间的自动转换 ____可通过在应用程序中嵌入PL/SQL事物处理块来改进性能 ____能在程序行和命令行上指定所需要的预编译可选项 并可在预编译的过程中改变它们的值 ____能全面检查嵌入的SQL数据操纵语句和PL/SQL块的文法和语义 ____可用SQL*Net并行存取多个地点的Oracle数据库 ____可把数组作为输入和输出程序变量使用 ____能对应用程序中的代码段进行条件预编译 ____提供了较强的异常处理功能 ____由此可见 通过预编译程序与其它高级语言的结合 既可以利用SQL强有力的功能和灵活性为数据库应用系统的开发提供强有力的手段 又可以充分利用高级语言自身在系统开发方面的优势 从而提供一个完备的基于Oracle数据库应用程序的开发解决方案 ____ 在VC中使用PRO*C ____每个PRO*C源文件一般由程序头和程序体两部分组成 程序头包含宿主变量(SQL语句中所包含的变量)说明 通讯区定义和C外部表示符的说明等 程序体一般是由若干函数组成 这些函数内含有SQL语句(以EXEC SQL起头的语句) ____PRO*C支持的数据类型包括:VARCHAR (变长字符串) 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 作词尾或 x 作词头修饰常量;在SQL语句中使用单引号来定义字符串 用双引号来定义特殊的或小写字符的标识符(如表名等);SQL语句中不允许使用C中的寻址 间接 位逻辑 复合赋值 ?= ++ % <<、>>操作符 并且用NOT AND OR =来分别代替! && || == ____下面的程序是一个连接数据库的PRO*C源程序例子 ____#include //声明SQL通讯区 ____#include ____#include ____EXEC SQL BEGIN DECLARE SECTION; ____VARCHAR username[ ]; //声明宿主变量 ____VARCHAR password[ ]; ____VARCHAR dbname[ ]; ____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 != ) //显式异常处理 ____ ____AfxMessageBox( \\n与 Oracle 数据库连接失败! ); ____return; ____*/ ____ ____在VC中使用PRO*C时 先用PRO*C编写所需的操作数据库的子程序 再运行PRO*C预编译程序把PRO*C源程序转成相应的 CPP源程序 将该程序插入到用户工程文件中 并在需要对插入函数进行调用的模块中说明函数 然后就可以在此模块中调用所需的函数 ____使用ODBC中间件访问数据库 ____ ODBC工作原理 ____ODBC是Open Database Connect(开放数据库互连)的简称 它是由Microsoft公司于 年提出的一个用于访问数据库的统一界面标准 是应用程序和数据库系统之间的中间件 它通过使用相应应用平台上和所需数据库对应的驱动程序与应用程序的交互来实现对数据库的操作 避免了在应用程序中直接调用与数据库相关的操作 从而提供了数据库的独立性 ____ODBC主要由驱动程序和驱动程序管理器组成 驱动程序是一个用以支持ODBC函数调用的模块(在WIN 下通常是一个DLL) 每个驱动程序对应于相应的数据库 当应用程序从基于一个数据库系统移植到另一个时 只需更改应用程序中由ODBC管理程序设定的与相应数据库系统对应的别名即可 驱动程序管理器(包含在ODBC DLL中)可链接到所有ODBC 应用程序中 它负责管理应用程序中ODBC函数与DLL中函数的绑定 ____ODBC使用层次的方法来管理数据库 在数据库通信结构的每一层 对可能出现依赖数据库产品自身特性的地方 ODBC都引入一个公共接口以解决潜在的不一致性 从而很好地解决了基于数据库系统应用程序的相对独立性 这也是ODBC一经推出就获得巨大成功的重要原因之一 ____从结构上分 ODBC分为单束式和多束式两类 ____单束式驱动程序 图 ____单束式驱动程序介于应用程序和数据库之间 像中介驱动程序一样数据提供一个统一的数据访问方式 ____当用户进行数据库操作时 应用程序传递一个ODBC函数调用给ODBC驱动程序管理器 由ODBC API判断该调用是由它直接处理还是送交驱动程序执行 ____可见 单束式驱动程序本身是一个数据库引擎 由它直接可完成对数据库的操作 尽管该数据库可能位于网络的任何地方 ____多束式驱动程序 图 ____多束式驱动程序负责在数据库引擎和客户应用程序之间传送命令和数据 它本身并不执行数据处理操作 而用于远程操作的网络通信协议的一个界面 ____前端应用程序提出对数据库处理的请求 该请求转给ODBC驱动程序管理器 驱动程序管理器依据请求的情况 就地完成或传给多束驱动程序 多束式驱动程序将请求翻译为特定厂家的数据库通信接口(如Oracle的SQLNet)所能理解的形式并交于接口去处理 接口把请求经网络传送给服务器上的数据引擎 服务器处理完后把结果发回给数据库通信接口 数据库接口将结果传给多束式ODBC驱动程序 再由驱动程序将结果传给应用程序 ____ 在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具有执 cha138/Article/program/Oracle/201311/17341 相关参考
知识大全 VC++ Oracle 开发入门教程
VC++Oracle开发入门教程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ORACLE数据
知识大全 VC下利用Pro*C开发Oracle接口
VC下利用Pro*C开发Oracle接口 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要本文
知识大全 在Oracle Developer/2000 中 调 用Windows API 函 数
在OracleDeveloper/2000中调用WindowsAPI函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们
知识大全 Oracle 8 数据库函数库的列举与具体介绍
Oracle8数据库函数库的列举与具体介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! OCI
知识大全 ORACLE入门之如何增加ORACLE连接数
ORACLE入门之如何增加ORACLE连接数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! OR
知识大全 oracle周数计算
oracle周数计算 =========================================================== 作者:keyneslin() 发表于:: 分类
知识大全 用VC设计托盘图标程序
用VC设计托盘图标程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在Windows操作系统中
知识大全 用VC控制iis的属性
用VC控制iis的属性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Author:zfive(zi
知识大全 用VC.NET制作启动屏幕的新方法
用VC.NET制作启动屏幕的新方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在利用VC+编
知识大全 Oracle连接数过多释放机制
Oracle连接数过多释放机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle服务器