连接数据库的方法---ODBC

2012-12-10 11:50 (分类:计算机程序)

技术博客,对抗遗忘……

1.ODBC   Open Database Connectivity    
1.1 简介:
提供了一组对数据库访问的标准API(应用程序编程接口),这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

ODBC现在看来是一个比较古老的东西,然而,正因为它是一个比较成熟和古老的规范,ODBC在大多数DBMS上都做可以使用,可以说一个像样的DBMS都应该支持ODBC 3.0或以上的版本。 
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBCAPI进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。 
应用系统程序通过标准API进行数据源连接,因此开发过程中不需指定特定的数据库系统,所以数据库系统的开放性从此被建立。 

1.2  odbc API
其API共可分为以下九类:
I. 连接数据源(Connecting to a Data Source)
1. SQLAllocEnv.  2. SQLAllocConnect.   3. SQLConnect.  4. SQLPriverConnect.   5. SQLBrowseConnect.
II. 取得驱动程序及数据源的相关讯息
1.SQLDataSource    2.SQLGetInfo.  3SQLGetFunctions.    4.SQLGetTypeInfo.
III. 设定及取得驱动程序的选项
1. SQLSetConnectOption.    2. SQLGetConnectOption.    3. SQLSetStmtOption.     4. SQLGetStmtOption.
IV. 准备SQL指令之需求
1. SQLAllocStmt.  2. SQLPrepare.    3. SQLSetParam.    4. SQLParamOptions.    5. SQLGetCursorName. 6.SQLSetCursorName. 7. SQLSetScrollOptions.
V. 传送及执行需求
1. SQLExecute.   2. SQLExecDirect.    3. SQLNativeSql.    4. SQLDescribeParanl.    5. SQLNumParams. 6.SQLParamData. 7. SQLPutData.
VI. 取得执行结果及有关结果的讯息
1. SQLRowCount.    2. SQLNumResultCols.     3. SQLDescribeCol.    4. SQLColAttributes.   5. SQLBindCol. 6.SQLFetch.   7. SQLExtendedFetch.    8. SQLGetData.   9. SQLSetDos.   10. SQLMoreResults.   11. SQLError.
VII. 取得有关数据源系统回录(System tables or Catalog)的讯息
1. SQLColumnPrivileges.   2. SQLColumns.    3. SQLForeignkeys. 4. SQLPrimaryKeys. 5.SQLProcedureColumns. 6. SQLProcedures. 7. SQLSpecialColumns. 8. SQLStatistics. 9. SQLTablePrivileges. 10. SQLTables.
VIII. 结束 SQL 指令需求
1. SQLFreeStmt. 2. SQLCancel. 3. SQLTransact.
IX. 结束与数据源的连接
1. SQLDisconnect. 2. SQLFreeConnect. 3. SQLFreeEnv.

以上所列之 ODBC API函数,我们发现全都以 SQL 为开头。除以上述分类外,各个函数在其必要性或复杂度上, 更被规定在不同的几个层级中 ODBC 函数的层级为核心层(Core level),第一层(Level 1),和第二层(Level 2)。我们再来看一个很基本的应用程序步骤是如何呢? 下图告诉我们这个答案。

 

 

回顾 ODBC 的架构及其执行过程,ODBC 造就了"应用程序独立性(Application Independency)"的特性,使应用程序不需在乎数据源是何种数据库系统或者纯粹是个资料或文本文件,只要相对驱动程序能完成衔接的功能,则应用程序即可达到高度的独立性。 

 

1.3 MFC  封装的odbc类
MFC的 ODBC类对较复杂的ODBC API进行了封装,提供了简化的调用接口。 

MFC  ODBC将ODBC API封装在类
CDatabase、主要功能是建立与数据源的连接;
CRecordSet、代表从数据源选择的一组记录(记录集)
CFieldExchange支持记录字段数据交换RFX,即记录集字段数据成员与相应的数据库的表的字段之间的数据交换 
CRecordView  供了一个表单视图与某个记录集直接相连,利用对话框数据交替机制(DDX)在记录集与表单视图的控件之间传输数据
CDBException   代表ODBC类产生的异常。 

使用MFCODBC 开发数据库应用程序的一般步骤
使用AppWizard访问数据库
使用类CDatabase连接数据库
使用类CRecordSet打开记录集、获取数据
使用类CRecordSet的函数MoveFirst()MoveLast()MoveNext()MovePrev()IsBOF()IsEOF()进行记录集的遍 历
使用类CRecordSet的函数AddNewUpdate增加记录
使用类CRecordSet的函数EditUpdate修改记录
使用类CRecordSet的函数Delete 删除记录
使用类CDatabase的函数ExecuteSQL直接执行SQL命令
使用类CDatabase的函数BeginTransCommitTransRollback处理事务

 

1.4 简单的odbc使用方法
建立数据源后,创建包含数据源的程序,在程序中将变量与数据源字段关联,不用编写具体代码,可以查看
数据库数据, 

 

转载于:https://www.cnblogs.com/centos2017/p/7896826.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA翻译插件Translate安装

1:安装插件 idea找到Plugins 输入Translate 点击installed 重启 2:翻译代码 选中代码,右键点击Translate 就能翻译了

代理类Proxy------ WeakHashMap----ReferenceQueue---- Reference

Proxy------ WeakHashMap----ReferenceQueue---- Reference转载于:https://www.cnblogs.com/yimian/p/7648544.html

看看你的网站有几个这样的链接?

为什么80%的码农都做不了架构师?>>> 这些要求都达到了,就是完美SEO的开始 1.pr大于3的链接 2.外链页面相关 3.永久型单向链接 4.外链必须是唯一的页面,不能是同一个ip下的 5.外链页面必须是静态页面 ..... 随机文章: …

UNICODE编程资料(转贴)

1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数?可以调用Microsoft Visual C的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。调用strlen函数,无法真正了解字符串中究竟有多少字符…

状态压缩DP入门

什么是状压DP: 动态规划的状态有时候比较恶心,不容易表示出来,需要用一些编码技术,把状态压缩的用简单的方式表示出来。 典型方式:当需要表示一个集合有哪些元素时,往往利用2进制用一个整数表示。 动态规…

InitializingBean、@PostConstruct、@Bean(initMethod = “init“)和构造方法 执行优先级比较

InitializingBean 1、InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。 2、spring初始化bean的时候,如果bean实现了InitializingBean接…

Windows 7 镜像制作过程

首先准备两台电脑,一台作为样机,一台作为技术人员电脑,技术人员电脑安装了Windows AIK第一部分、系统安装配置1、安装Windows 7 操作系统,步骤略过2、启用Administrator,使用Administrator登陆,然后在控制面…

论文笔记——Deep Model Compression Distilling Knowledge from Noisy Teachers

论文地址:https://arxiv.org/abs/1610.09650 主要思想 这篇文章就是用teacher-student模型,用一个teacher模型来训练一个student模型,同时对teacher模型的输出结果加以噪声,然后来模拟多个teacher,这也是一种正则化的方…

mysql清空全表数据建议直接用truncate,效率上truncate远高于delete

如果是清空全表数据建议直接用truncate,效率上truncate远高于delete,应为truncate不走事务,不会锁表,也不会生产大量日志写入日志文件;truncate table table_name 后立刻释放磁盘空间,并重置auto_increment…

[你必须知道的css系列]第一回:丰富的利器终结篇:选择符的组合关系及选择符总结...

介绍了这么多选择符,其实选择符的使用最大的优势不是单枪匹马奋斗,而应该是针对不同的页面结构组合成各种方阵。其主要方式体现在针对性使用类选择符或者 ID选择符、选择符群组及选择符组合这3种方式。一、针对性使用类选择符或者 ID选择符主要作用于类选…

剑指offer之 旋转数组的最小数字

package Problem8; public class MinInReversingList { /* * 题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 * 输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}…

SQL中delete和update后加 Limit是个好习惯

在业务场景要求高的数据库中,对于单条删除和更新操作,在 delete 和 update 后面加 limit 1 绝对是个好习惯。比如,在删除执行中,第一条就命中了删除行,如果 SQL 中有 limit 1;这时就 return 了,…

一个javascript框架应有的功能

一个人学许多东西,不等于他会很多东西,学了也会忘的,学了也不等于会运用,这时我们应该整一个很复杂的东西出来,那么就知道自己到底去到什么程度。基于这样的理由,我开始搞框架了,像我群里面的许…

appcan UI

appcan UI 公共类 ([appcanUI框架地址:](http://newdocx.appcan.cn/UI/source) .ub {display: -webkit-box !important;display: box !important;position: relative; }.ub-rev {-webkit-box-direction: reverse;box-direction: reverse; }.ub-fh {width…

sql表字段类型尽量使用数值替代字符串类型

尽量使用数值替代字符串类型 比如性别(sex):0代表女,1代表男;数据库没有布尔类型, mysql 推荐使用 tinyint 1:因为引擎在处理查询和连接时会逐个比较字符串中每一个字符; 2:而对于数字型而言只…

问题步骤记录器——“懒教师”的好帮手

场景:电话响,接通电话,电话另一端:我的电脑又怎么怎么了,为什么我的***弄不出那样的效果?请问***要怎样操作?感悟:虽然不是大虾,但由于众多同学当中,我仍然靠…

问题账户需求分析

材料: 某大银行的一位银行卡办公室的收账经理Liz遇到了一个问题。她每周都收到一份过期未付款的账户名单。这份报告已经从两年前的250个账户增加到现在的1250个账户。为了确定那些严重拖欠债务的账户,Liz需要通读这份报告。严重拖欠债务的账户由几个不同…

SQL优化技巧使用varchar代替char

一:varchar 变长字段按数据内容实际长度存储,存储空间小,可以节省存储空间; 二:char 按声明大小存储,不足补空格; 三:其次对于查询来说,在一个相对较小的字段内搜索&am…

显式调用构造函数产生的悲剧

昨天一个同学让我帮他调试程序,发现一个诡异的问题,明明一个类的私有成员被赋值了,但运行时却总是不定的值。仔细检查了好久,才发现原来他把构造函数当作普通函数进行了显式调用,结果产生了悲剧。将他的问题简单的抽象…

input输入框修改后自动跳到最后一个字符

<input class"m-form-control" onpaste"return false" placeholder"直播间名称" name"name" onkeyup"this.valuethis.value.replace(/[^\u4e00-\u9fa5|\u0000-\u00ff|\u3002|\uFF1F|\uFF01|\uff0c|\u3001|\uff1b|\uff1a|\u300…