您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 商业计划书 > 数据库系统简明教程(15)
第十五章开放数据库互连(ODBC)•ODBC优点:–移植性好–能同时访问不同的数据库–共享多个数据资源第十五章开放数据库互连(ODBC)15.1数据库互连概述15.2ODBC工作原理概述15.3使用ODBC的系统结构15.4ODBCAPI基础15.5ODBC的工作流程15.6小结15.1数据库互连概述•ODBC产生的原因:–由于不同的数据库管理系统的存在,在某个RDBMS下编写的应用程序就不能在另一个RDBMS下运行–许多应用程序需要共享多个部门的数据资源,访问不同的RDBMS数据库互连概述(续)•ODBC:–是微软公司开放服务体系(WindowsOpenServicesArchitecture,WOSA)中有关数据库的一个组成部分–提供了一组访问数据库的标准API•ODBC约束力:–规范应用开发–规范RDBMS应用接口15.2ODBC工作原理概述ODBC的基本思想是为用户提供简单、标准、透明的数据库连接的公共编程接口,开发厂商根据ODBC的标准去实现底层的驱动程序,这个驱动对用户是透明的,并允许根据不同的DBMS采用不同的技术加以优化实现,这就利于不断吸收新的技术而趋完善。15.2ODBC工作原理概述应用程序1应用程序n数据库调用转换接口OracleDB2SQLServer数据库A数据库B数据库C客户端网络服务器15.3使用ODBC的系统结构•ODBC应用系统的体系结构:一、用户应用程序二、驱动程序管理器三、数据库驱动程序四、ODBC数据源管理一、应用程序•ODBC应用程序包括的内容:–请求连接数据库;–向数据源发送SQL语句;–为SQL语句执行结果分配存储空间,定义所读取的数据格式;–获取数据库操作结果,或处理错误;–进行数据处理并向用户提交处理结果;–请求事务的提交和回滚操作;–断开与数据源的连接。二、驱动程序管理器•驱动程序管理器:用来管理各种驱动程序–包含在ODBC32.DLL中–管理应用程序和驱动程序之间的通信–建立、配置或删除数据源并查看系统当前所安装的数据库ODBC驱动程序–主要功能:装载ODBC驱动程序选择和连接正确的驱动程序管理数据源检查ODBC调用参数的合法性记录ODBC函数的调用等三、数据库驱动程序•ODBC通过驱动程序来提供应用系统与数据库平台的独立性•ODBC应用程序不能直接存取数据库–其各种操作请求由驱动程序管理器提交给某个RDBMS的ODBC驱动程序–通过调用驱动程序所支持的函数来存取数据库。–数据库的操作结果也通过驱动程序返回给应用程序。–如果应用程序要操纵不同的数据库,就要动态地链接到不同的驱动程序上。数据库驱动程序(续)•ODBC驱动程序类型:–单束数据源和应用程序在同一台机器上驱动程序直接完成对数据文件的I/O操作驱动程序相当于数据管理器–多束支持客户机/服务器、客户机/应用服务器/数据库服务器等网络环境下的数据访问由驱动程序完成数据库访问请求的提交和结果集接收应用程序使用驱动程序提供的结果集管理接口操纵执行后的结果数据四、ODBC数据源管理•数据源:是最终用户需要访问的数据,包含了数据库位置和数据库类型等信息,是一种数据连接的抽象•数据源对最终用户是透明的–ODBC给每个被访问的数据源指定唯一的数据源名(DataSourceName,简称DSN),并映射到所有必要的、用来存取数据的低层软件–在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等–最终用户无需知道DBMS或其他数据管理软件、网络以及有关ODBC驱动程序的细节ODBC数据源管理(续)例如,假设某个学校在MSSQLServer和Access上创建了两个数据库:学校人事数据库和教学科研数据库。–学校的信息系统要从这两个数据库中存取数据–为方便与两个数据库连接,为学校人事数据库创建一个数据源名PERSON,为教学科研数据库创建一个名为EDU的数据源。–当要访问每一个数据库时,只要与PERSON和EDU连接即可,不需要记住使用的驱动程序、服务器名称、数据库名15.4ODBCAPI基础•ODBC应用程序接口的一致性–API一致性API一致性级别有核心级、扩展1级、扩展2级–语法一致性语法一致性级别有最低限度SQL语法级、核心SQL语法级、扩展SQL语法级ODBCAPI基础(续)一、函数概述二、句柄及其属性三、数据类型一、函数概述•ODBC3.0标准提供了76个函数接口:–分配和释放环境句柄、连接句柄、语句句柄;–连接函数(SQLDriverconnect等);–与信息相关的函数(如获取描述信息函数SQLGetinfo、SQLGetFuction);–事务处理函数(如SQLEndTran);–执行相关函数(SQLExecdirect、SQLExecute等);–编目函数,ODBC3.0提供了11个编目函数如SQLTables、SQLColumn等,应用程序可以通过对编目函数的调用来获取数据字典的信息如权限、表结构等函数概述(续)•ODBC1.0和ODBC2.x、ODBC3.x函数使用上有很多差异•MFCODBC对较复杂的ODBCAPI进行了封装,提供了简化的调用接口二、句柄及其属性•句柄是32位整数值,代表一个指针•ODBC3.0中句柄分类:–环境句柄–连接句柄–语句句柄–描述符句柄句柄及其属性(续)•应用程序句柄之间的关系应用程序句柄之间的关系句柄及其属性(续)1.每个ODBC应用程序需要建立一个ODBC环境,分配一个环境句柄,存取数据的全局性背景如环境状态、当前环境状态诊断、当前在环境上分配的连接句柄等;2.一个环境句柄可以建立多个连接句柄,每一个连接句柄实现与一个数据源之间的连接;句柄及其属性(续)3.在一个连接中可以建立多个语句句柄,它不只是一个SQL语句,还包括SQL语句产生的结果集以及相关的信息等;4.在ODBC3.0中又提出了描述符句柄的概念,它是描述SQL语句的参数、结果集列的元数据集合。三、数据类型•ODBC数据类型:–SQL数据类型:用于数据源–C数据类型:用于应用程序的C代码•应用程序可以通过SQLGetTypeInfo来获取不同的驱动程序对于数据类型的支持情况数据类型(续)SQL数据类型C数据类型SQL数据类型数据源之间转换应用程序变量传送语句参数(SQLBindparameter)C数据类型从结果集列中返回到应用程序变量(SQLBindcol)应用程序变量之间转换SQL数据类型和C数据类型之间的转换规则15.5ODBC的工作流程•ODBC的工作流程:ODBC的工作流程(续)[例13]将Access数据库中Student表的数据备份到SQLSERVER数据库中。该应用涉及两个不同的RDBMS中的数据源使用ODBC来开发应用程序,只要改变应用程序中连接函数(SQLConnect)的参数,就可以连接不同RDBMS的驱动程序,连接两个数据源ODBC的工作流程(续)在应用程序运行前,已经在Access和SQLSERVER中分别建立了STUDENT关系表CREATETABLEStudent(SnoCHAR(9)PRIMARYKEY,SnameCHAR(20)UNQUESsexCHAR(2),SageSMALLINT,SdeptCHAR(20));ODBC的工作流程(续)•应用程序要执行的操作是:–在Access上执行SELECT*FROMSTUDENT;–把获取的结果集,通过多次执行INSERTINTOSTUDENT(Sno,Sname,Ssex,Sage,Sddept)VALUES(?,?,?,?,?);插入到SQLSERVER的STUDENT表中ODBC的工作流程(续)•操作步骤:一、配置数据源二、初始化环境三、建立连接四、分配语句句柄五、执行SQL语句六、结果集处理七、中止处理一、配置数据源•配置数据源两种方法:⑴运行数据源管理工具来进行配置;⑵使用DriverManager提供的ConfigDsn函数来增加、修改或删除数据源•在[例13]中,采用了第一种方法创建数据源。因为要同时用到Access和SQLServer,所以分别建立两个数据源,将其取名为AccessODBC和SQLServer。配置数据源(续)[例13]创建数据源的详细过程#includestdlib.h#includestdio.h#includewindows.h#includesql.h#includesqlext.h#includeSqltypes.h#defineSNO_LEN30#defineNAME_LEN50#defineDEPART_LEN100#defineSSEX_LEN5配置数据源(续)[例13]创建数据源---第一步:定义句柄和变量intmain(){/*Step1定义句柄和变量*///以Access开头的表示的是连接Access的变量//以server开头的表示的是连接SQLSERVER的变量SQLHENVAccesshenv,serverhenv;//环境句柄SQLHDBCAccesshdbc,serverhdbc;//连接句柄SQLHSTMTAccesshstmt,serverhstmt;//语句句柄SQLRETURNret;SQLCHARsName[NAME_LEN],sDepart[DEPART_LEN],sSex[SSEX_LEN],sSno[SNO_LEN];SQLINTEGERsAge;SQLINTEGERcbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,cbName=SQL_NTS,cbDepart=SQL_NTS;二、初始化环境•没有和具体的驱动程序相关联,由DriverManager来进行控制,并配置环境属性•应用程序通过调用连接函数和某个数据源进行连接后,DriverManager才调用所连的驱动程序中的SQLAllocHandle,来真正分配环境句柄的数据结构初始化环境[例13]创建数据源---第二步:初始化环境/*Step2初始化环境*/ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&Accesshenv);ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);ret=SQLSetEnvAttr(Accesshenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);三、建立连接•应用程序调用SQLAllocHandle分配连接句柄,通过SQLConnect、SQLDriverConnect或SQLBrowseConnect与数据源连接•SQLConnect连接函数,输入参数为:–配置好的数据源名称–用户ID–口令•[例13]中AccessODBC为数据源名字,用户名和密码为空建立连接代码[例13]创建数据源---第三步:建立连接/*Step3:建立连接*/ret=SQLAllocHandle(SQL_HANDLE_DBC,Accesshenv,&Accesshdbc);ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);ret=SQLConnect(Accesshdbc,“AccessODBC,SQL_NTS,,SQL_NTS,,SQL_NTS);if(!SQL_SUCCEEDED(ret))//连接失败时返回错误值return-1;ret=SQLConnect(serverhdbc,SQLServer,SQL_NTS,sa,SQL_NTS,sa,SQL_NTS);if(!SQL_SUCCEEDED(ret))//连接失败时返回错误值return-1;四、分配语句句柄•处理任何SQL语句之前,应用程序还需要首先分配一个语句
本文标题:数据库系统简明教程(15)
链接地址:https://www.777doc.com/doc-2428772 .html