1 / 30

ODBC 简介

ODBC 简介. 数据库系统与应用 2014 年. 连接数据库的方式. 预编译 嵌入式 SQL 等 OCCI ( Oracle C++ Call Interface ) OCILIB (针对 Oracle 的开源库,封装 oci ) 统一的数据访问接口 ODBC (即将讲到的) ADO ( ActiveX Data Objects ) DAO/RDO (本地数据库 / 远程数据库) OLE DB (包括非结构数据的访问) JDBC ( Java 访问数据库的方式). 基本概念.

liana
Download Presentation

ODBC 简介

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ODBC 简介 数据库系统与应用 2014年

  2. 连接数据库的方式 • 预编译 • 嵌入式SQL等 • OCCI (Oracle C++ Call Interface) • OCILIB (针对Oracle的开源库,封装oci) • 统一的数据访问接口 • ODBC (即将讲到的) • ADO(ActiveX Data Objects ) • DAO/RDO(本地数据库/远程数据库) • OLE DB(包括非结构数据的访问) • JDBC(Java访问数据库的方式)

  3. 基本概念 ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。 一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access 、MYSQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。

  4. 基本层次

  5. 组成部分 • 应用程序要访问一个数据库,必须是在ODBC管理器注册了的数据源 • ODBC管理器:该程序位于Windows 控制面板(Control Panel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。 • 驱动程序管理器:驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。 • ODBC API:ODBC编程接口,提供常用的类(CDatabase、CRecordset)、方法。 • ODBC驱动程序:是一些DLL,提供了ODBC和数据库之间的接口 • 数据源:数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。

  6. 非本地Oracle服务器时

  7. 使用ODBC连接数据库[1-2] • 首先进行ODBC数据源设置 • windows7 + oracle10g • 在具体的程序设计环境中使用ODBC连接数据库 • VC 6.0

  8. 使用ODBC连接数据库[2-2] 在访问ODBC数据源时需要ODBC驱动程序的支持。微软和Oracle公司都提供了Oracle数据库的ODBC驱动,Oracle为自己写的ODBC驱动功能更细腻一些,支持的API也更全一些。Oracle的ODBC驱动是依赖于OCI的客户端库的。OCI Client和Oracle DB Server之间通过TNS服务作为桥梁,因此要用上ODBC,还得为Oracle数据库服务器配置一个db service name,这个使用Net Manager或者Net Assistant都可以完成,甚至直接修改tnsnames.ora文件也可以(远程连接数据库时)。

  9. 点击添加 ODBC数据源设置[1-4] 1.控制面板→管理工具→数据源 (ODBC) → 用户DSN 添加新的数据源

  10. ODBC数据源设置[2-4] 2.选择所要添加的数据源类型,选择后点击“完成”

  11. ODBC数据源设置[3-4] 3.配置Oracle ODBC驱动 自己取DSN 的名称 配置Oracle 服务器 本地服务器127.0.0.1

  12. ODBC数据源设置[4-4] 4.配置完成,可以在ODBC数据源管理程序中看到新添加 Oracle数据源

  13. 使用Oracle ODBC driver

  14. ODBC MFC 基类库定义了几个数据库类。在利用ODBC 编程时,经常要使用到: • CDatabase类对象提供了对数据源的连接,通过它你可以对数据源进行操作。 • CRecordSet类对象提供了从数据源中提取出的记录集。 • CRecordView类对象能以控制的形式显示数据库记录。这个视图是直接连到一个CRecordSet 对象的表视图。

  15. 利用向导连接数据库[1-4] 1.建立基于文档的MFC工程,在AppWizard的第二步,选择第四项,点击“Data Source”进行配置 点击进入 数据源选择

  16. 利用向导连接数据库[2-4] 2.选择要使用的数据源

  17. 利用向导连接数据库[3-4] 3.选择欲使用的表

  18. 利用向导连接数据库[4-4] 4.向导结束时可以发现多了一个继承自CRecordSet的类,它既是根据用户选择的表自动生成的记录集类

  19. ODBC连接(不用向导)[1-2]

  20. ODBC连接(不用向导)[2-2]

  21. 步骤[1] • 建立一个CDatabase的实例CDatabase m_db; • 连接数据库m_db.OpenEx(_T("DSN=ora_Gong;UID=dodo;PWD=ddoo"),CDatabase::openReadOnly | CDatabase::noOdbcDialog); • 建立一个CRecordset的实例()CRecordset rec(&m_db); 和CDatabase实例相连

  22. 步骤[2] • 执行一个初始化查询. rec.Open(AFX_DB_USE_DEFAULT_TYPE,_T("select * from employee")); 5. 设置查询条件rec.m_strFilter=“ENAME=‘cjw'";rec.m_strSort=“ENO";rec.Requery();对应的SQL语句为:select * from employee WHERE SNAME='电动机'ORDER BY SNO

  23. [3] 6. 取得查询结果(只取一条记录)CDBVariant dbvar; rec.GetFieldValue(short(0),dbvar); if (dbvar.m_dwType == DBVT_STRING) { CString str=*(dbvar.m_pstring); }

  24. [4] 7. 取得查询结果(多条记录)short nFields = rec.GetODBCFieldCount( );while( ! rec.IsEOF( ) ) { for( short index = 0; index < nFields; index++ ) { rec.GetFieldValue( index, varValue ); // 对 varValue进行处理 } rec.MoveNext( ); } Move(),MoveNext(), MovePrev(),MoveFirst(),MoveLast()

  25. VC6中利用ODBC连接 1.增加记录使用rec.AddNew(); //在表的末尾增加新记录rec.SetFieldNull(&(rec- >m_type), FALSE);rec.m_type=" 电动机";... //输入新的字段值rec.Update(); //将新记录存入数据库rec.Requery(); //重建记录集 2.删除记录直接使用Delete() 函数,并且在调用Delete() 函数之后不需调用Update() 函数 3.修改记录修改记录使用Edit() 函数: m_pSet- >Edit(); //修改当前记录m_pSet- >m_type="发电机";m_pSet- >Update(); // m_pSet- >Requery();

  26. VC6中利用ODBC连接 4.关闭并释放空间rec.Close( );m_db.Close( ); SQL 语句的直接执行(CDatabase上): 如建立新表,删除表,建立新的字段等等 CDatabase::ExecuteSQL()函数来完成SQL 语句的直接执行 如:

  27. 总结 建议:(根据我们的使用) 对于不返回结果集的SQL语句,我们应该使用CDatabase::ExecuteSQL()来执行,如:删除(DELETE),插入(INSERT),更新(UPDATE). 对于需要返回结果集的SQL语句,我们需要使用CRecordSet::Open()方法来执行,如:查询(SELECT)。

  28. Thank you! http://home.ustc.edu.cn/~qhuang/database.html

More Related