ImageVerifierCode 换一换
格式:PPTX , 页数:57 ,大小:440.58KB ,
资源ID:3664296      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-3664296.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据库系统简明教程(15).pptx)为本站会员(Facebook)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

数据库系统简明教程(15).pptx

1、第十五章 开放数据库互连(ODBC),ODBC优点: 移植性好 能同时访问不同的数据库 共享多个数据资源,第十五章 开放数据库互连(ODBC),15.1 数据库互连概述 15.2 ODBC工作原理概述 15.3 使用ODBC的系统结构 15.4 ODBC API 基础 15.5 ODBC的工作流程 15.6 小结,15.1 数据库互连概述,ODBC产生的原因: 由于不同的数据库管理系统的存在,在某个RDBMS下编写的应用程序就不能在另一个RDBMS下运行 许多应用程序需要共享多个部门的数据资源,访问不同的RDBMS,数据库互连概述(续),ODBC: 是微软公司开放服务体系(Windows Op

2、en Services Architecture,WOSA)中有关数据库的一个组成部分 提供了一组访问数据库的标准API ODBC约束力: 规范应用开发 规范RDBMS应用接口,15.2 ODBC工作原理概述,ODBC的基本思想是为用户提供简单、标准、透明的数据库连接的公共编程接口,开发厂商根据ODBC的标准去实现底层的驱动程序,这个驱动对用户是透明的,并允许根据不同的DBMS采用不同的技术加以优化实现,这就利于不断吸收新的技术而趋完善。,15.2 ODBC工作原理概述,15.3 使用ODBC的系统结构,ODBC应用系统的体系结构 : 一、 用户应用程序 二、 驱动程序管理器 三、 数据库驱动

3、程序 四、 ODBC数据源管理,一、 应用程序,ODBC应用程序包括的内容: 请求连接数据库; 向数据源发送SQL语句; 为SQL语句执行结果分配存储空间,定义所读取的数据格式; 获取数据库操作结果,或处理错误; 进行数据处理并向用户提交处理结果; 请求事务的提交和回滚操作; 断开与数据源的连接。,二、驱动程序管理器,驱动程序管理器:用来管理各种驱动程序 包含在ODBC32.DLL中 管理应用程序和驱动程序之间的通信 建立、配置或删除数据源并查看系统当前所安装的数据库ODBC驱动程序 主要功能: 装载ODBC驱动程序 选择和连接正确的驱动程序 管理数据源 检查ODBC调用参数的合法性 记录OD

4、BC函数的调用等,三、数据库驱动程序,ODBC通过驱动程序来提供应用系统与数据库平台的独立性 ODBC应用程序不能直接存取数据库 其各种操作请求由驱动程序管理器提交给某个RDBMS的ODBC驱动程序 通过调用驱动程序所支持的函数来存取数据库。 数据库的操作结果也通过驱动程序返回给应用程序。 如果应用程序要操纵不同的数据库,就要动态地链接到不同的驱动程序上。,数据库驱动程序(续),ODBC驱动程序类型: 单束 数据源和应用程序在同一台机器上 驱动程序直接完成对数据文件的I/O操作 驱动程序相当于数据管理器 多束 支持客户机/服务器、客户机/应用服务器/数据库服务器等网络环境下的数据访问 由驱动程

5、序完成数据库访问请求的提交和结果集接收 应用程序使用驱动程序提供的结果集管理接口操纵执行后的结果数据,四、ODBC数据源管理,数据源:是最终用户需要访问的数据,包含了数据库位置和数据库类型等信息,是一种数据连接的抽象 数据源对最终用户是透明的 ODBC给每个被访问的数据源指定唯一的数据源名(Data Source Name,简称DSN),并映射到所有必要的、用来存取数据的低层软件 在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等 最终用户无需知道DBMS或其他数据管理软件、网络以及有关ODBC驱动程序的细节,ODBC数据源管理(续),例如,假设某个学校在MS SQL Server

6、和Access上创建了两个数据库:学校人事数据库和教学科研数据库。 学校的信息系统要从这两个数据库中存取数据 为方便与两个数据库连接,为学校人事数据库创建一个数据源名PERSON,为教学科研数据库创建一个名为EDU的数据源。 当要访问每一个数据库时,只要与PERSON和EDU连接即可,不需要记住使用的驱动程序、服务器名称、数据库名,15.4 ODBC API 基础,ODBC 应用程序接口的一致性 API一致性 API一致性级别有核心级、扩展1级、扩展2级 语法一致性 语法一致性级别有最低限度SQL语法级、核心SQL语法级、扩展SQL语法级,ODBC API 基础(续),一、 函数概述 二、 句

7、柄及其属性 三、 数据类型,一、 函数概述,ODBC 3.0 标准提供了76个函数接口: 分配和释放环境句柄、连接句柄、语句句柄; 连接函数(SQLDriverconnect等); 与信息相关的函数(如获取描述信息函数SQLGetinfo、SQLGetFuction); 事务处理函数(如SQLEndTran); 执行相关函数(SQLExecdirect、SQLExecute等); 编目函数,ODBC 3.0提供了11个编目函数如SQLTables、SQLColumn等,应用程序可以通过对编目函数的调用来获取数据字典的信息如权限、表结构等,函数概述(续),ODBC 1.0和ODBC 2.x、OD

8、BC 3.x函数使用上有很多差异 MFC ODBC对较复杂的ODBC API进行了封装,提供了简化的调用接口,二、 句柄及其属性,句柄是32位整数值,代表一个指针 ODBC 3.0中句柄分类: 环境句柄 连接句柄 语句句柄 描述符句柄,句柄及其属性(续),应用程序句柄之间的关系,应用程序句柄之间的关系,句柄及其属性(续),1. 每个ODBC应用程序需要建立一个ODBC环境,分配一个环境句柄,存取数据的全局性背景如环境状态、当前环境状态诊断、当前在环境上分配的连接句柄等; 2. 一个环境句柄可以建立多个连接句柄,每一个连接句柄实现与一个数据源之间的连接;,句柄及其属性(续),3. 在一个连接中可

9、以建立多个语句句柄,它不只是一个SQL语句,还包括SQL语句产生的结果集以及相关的信息等; 4. 在ODBC 3.0中又提出了描述符句柄的概念,它是描述SQL语句的参数、结果集列的元数据集合。,三、 数据类型,ODBC数据类型: SQL数据类型:用于数据源 C数据类型 :用于应用程序的C代码 应用程序可以通过SQLGetTypeInfo来获取不同的驱动程序对于数据类型的支持情况,数据类型(续),SQL数据类型和C数据类型之间的转换规则,15.5 ODBC的工作流程,ODBC的工作流程:,ODBC的工作流程(续),例13将Access数据库中Student表的数据备份到SQL SERVER数据库

10、中。 该应用涉及两个不同的RDBMS中的数据源 使用ODBC来开发应用程序,只要改变应用程序中连接函数(SQLConnect)的参数,就可以连接不同RDBMS的驱动程序,连接两个数据源,ODBC的工作流程(续),在应用程序运行前,已经在Access和SQL SERVER中分别建立了STUDENT关系表CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNQUE Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20);,ODBC的工作流程(续),应用程序要执行的操作是: 在Access上执行S

11、ELECT * FROM STUDENT; 把获取的结果集,通过多次执行INSERT INTO STUDENT (Sno,Sname,Ssex,Sage,Sddept) VALUES (?, ?, ?, ?, ?); 插入到SQL SERVER的STUDENT表中,ODBC的工作流程(续),操作步骤:一、 配置数据源二、 初始化环境三、 建立连接 四、 分配语句句柄五、 执行SQL语句六、 结果集处理七、 中止处理,一、 配置数据源,配置数据源两种方法:运行数据源管理工具来进行配置;使用Driver Manager 提供的ConfigDsn函数来增加、修改或删除数据源 在例13中,采用了第一种

12、方法创建数据源。因为要同时用到Access和SQL Server,所以分别建立两个数据源,将其取名为AccessODBC和SQLServer。,配置数据源(续),例13创建数据源的详细过程 #include #include #include #include #include #include #define SNO_LEN 30 #define NAME_LEN 50 #define DEPART_LEN 100 #define SSEX_LEN 5,配置数据源(续),例13创建数据源-第一步:定义句柄和变量 int main() /* Step 1 定义句柄和变量 */以Access开头

13、的表示的是连接Access的变量/以server开头的表示的是连接SQLSERVER的变量SQLHENV Accesshenv, serverhenv; /环境句柄SQLHDBC Accesshdbc,serverhdbc; /连接句柄SQLHSTMT Accesshstmt,serverhstmt; /语句句柄SQLRETURN ret;SQLCHAR sNameNAME_LEN,sDepartDEPART_LEN,sSexSSEX_LEN, sSnoSNO_LEN;SQLINTEGER sAge;SQLINTEGER cbAge=0, cbSno=SQL_NTS, cbSex=SQL_NT

14、S,cbName=SQL_NTS,cbDepart=SQL_NTS;,二、初始化环境,没有和具体的驱动程序相关联,由Driver Manager来进行控制 ,并配置环境属性 应用程序通过调用连接函数和某个数据源进行连接后,Driver Manager才调用所连的驱动程序中的SQLAllocHandle,来真正分配环境句柄的数据结构,初始化环境,例13创建数据源-第二步:初始化环境/* Step 2 初始化环境 */ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE, ,三、 建立连接,应用程序调用SQLAllocHandle分配连接句柄,通过SQ

15、LConnect、SQLDriverConnect或SQLBrowseConnect与数据源连接 SQLConnect连接函数,输入参数为: 配置好的数据源名称 用户ID 口令 例13中AccessODBC为数据源名字,用户名和密码为空,建立连接代码,例13创建数据源-第三步:建立连接 /* Step 3 :建立连接 */ ret=SQLAllocHandle(SQL_HANDLE_DBC, Accesshenv, ,四、分配语句句柄,处理任何SQL语句之前,应用程序还需要首先分配一个语句句柄 语句句柄含有具体的SQL语句以及输出的结果集等信息 例13中分配了两个语句句柄: 一个用来从Acce

16、ss中读取数据产生结果集(Accesshstmt) 一个用来向SQLSERVER插入数据(serverhstmt) 应用程序还可以通过SQLtStmtAttr来设置语句属性(也可以使用默认值) 例13中结果集绑定的方式为按列绑定,分配语句句柄代码,例13创建数据源-第四步 /* Step 4 :初始化语句句柄 */ ret=SQLAllocHandle(SQL_HANDLE_STMT, Accesshdbc, ,五、 执行SQL语句,应用程序处理SQL语句的两种方式: 预处理(SQLPrepare、SQLExecute适用于语句的多次执行) 直接执行(SQLExecdirect) 如果SQL语

17、句含有参数,应用程序为每个参数调用SQLBindParameter,并把它们绑定至应用程序变量 应用程序可以直接通过改变应用程序缓冲区的内容从而在程序中动态的改变SQL语句的具体执行,执行SQL语句(续),应用程序根据语句的类型进行的处理 有结果集的语句(select或是编目函数),则进行结果集处理。 没有结果集的函数,可以直接利用本语句句柄继续执行新的语句或是获取行计数(本次执行所影响的行数)之后继续执行。 在例13中,使用SQLExecdirect获取Access中的结果集,并将结果集根据各列不同的数据类型绑定到用户程序缓冲区 在插入数据时,采用了预编译的方式,首先通过SQLPrepare

18、来预处理SQL语句,将每一列绑定到用户缓冲区 应用程序可以直接修改结果集缓冲区的内容,程序源码,例13创建数据源-第五步:执行SQL语句/* Step 5 :两种方式执行语句 */ /* 预编译带有参数的语句 */ ret=SQLPrepare(serverhstmt,“INSERT INTO STUDENT(SNO,SNAME,SSEX, SAGE,SDEPT) VALUES (?, ?, ?, ?, ?)“, SQL_NTS); if (ret=SQL_SUCCESS | ret=SQL_SUCCESS_WITH_INFO) ret=SQLBindParameter(serverhstmt

19、,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, SNO_LEN, 0, sSno, 0, ,程序源码,ret=SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR, DEPART_LEN, 0, sDepart, 0, ,六、结果集处理,应用程序可以通过SQLNumResultCols来获取结果集中的列数 通过SQLDescribeCol或是SQLColAttrbute函数来获取结果集每一列的名称、数据类型、精度和范围,结果集处理(续),ODBC中使用游标来处理结果集数据 ODBC中

20、游标类型: forward-only游标,是ODBC的默认游标类型 可滚动(scroll)游标: 静态(static) 动态(dynamic) 码集驱动(keyset-driven) 混合型(mixed),结果集处理(续),结果集处理步骤: ODBC游标打开方式不同于嵌入式SQL,不是显式声明而是系统自动产生一个游标(Cursor),当结果集刚刚生成时,游标指向第一行数据之前 应用程序通过SQLBindCol,把查询结果绑定到应用程序缓冲区中,通过SQLFetch或是SQLFetchScroll来移动游标获取结果集中的每一行数据 对于如图像这类特别的数据类型当一个缓冲区不足以容纳所有的数据时,

21、可以通过SQLGetdata分多次获取 最后通过SQLClosecursor来关闭游标,程序源码代码,例13创建数据源-第六步:结果集处理/* Step 6 :处理结果集并执行预编译后的语句*/printf(“%sn“,“学号 姓名 性别 年龄 系“);printf(“-n“);while ( (ret=SQLFetch(Accesshstmt) ) !=SQL_NO_DATA_FOUND) if(ret=SQL_ERROR) printf(“Fetch errorn“);else printf(“%s %9.8s %s %2d sn“,sSno,sName,sSex,sAge,sDepart

22、); ,七、中止处理,应用程序中止步骤: 首先释放语句句柄 释放数据库连接 与数据库服务器断开 释放ODBC环境,中止处理代码,例13创建数据源-第七步:中止处理/* Step 7 中止处理*/ SQLFreeHandle(SQL_HANDLE_STMT,Accesshstmt); SQLDisconnect(Accesshdbc); SQLFreeHandle(SQL_HANDLE_DBC, Accesshdbc); SQLFreeHandle(SQL_HANDLE_ENV,Accesshenv); SQLFreeHandle(SQL_HANDLE_STMT, serverhstmt); S

23、QLDisconnect(serverhdbc); SQLFreeHandle(SQL_HANDLE_DBC, serverhdbc); SQLFreeHandle(SQL_HANDLE_ENV, serverhenv); return 0; ,15.6 ADO.NET,ADO.NET 是一组向 .NET Framework 程序员公开数据访问服务的类。 提供对诸如 SQL Server 和 XML 这样的数据源以及通过 OLE DB 和 ODBC 公开的数据源的一致访问。 共享数据的使用方应用程序可以使用 ADO.NET 连接到这些数据源,并可以检索、处理和更新其中包含的数据。,15.6 A

24、DO.NET,ADO.NET 3.0 用于访问和操作数据的两个主要组件是 .NET Framework 数据提供程序和 DataSet。 .NET Framework 数据提供程序是专门为数据操作以及快速、只进、只读访问数据而设计的组件。 ADO.NET DataSet 是专门为独立于任何数据源的数据访问而设计的。,15.6 ADO.NET,15.6 ADO.NET,15.6 ADO.NET,.NET Framework 数据提供程序的四个核心对象。,15.6 示例,例:查询学生信息 using System; using System.Data; using System.Data.SqlC

25、lient;class Program static void Main()string connectionString =“Data Source=(local);Initial Catalog=S_T;Integrated Security=true“;string queryString =“SELECT * from Student “;/ 定义connection对象using (SqlConnection connection =new SqlConnection(connectionString)/ 定义command对象SqlCommand command = new Sql

26、Command(queryString, connection);,15.6 示例,/ 打开connection对象,定义并执行 DataReader对象,结果集输出到控制台tryconnection.Open();SqlDataReader reader = command.ExecuteReader();while (reader.Read()Console.WriteLine(“t0t1t2“, reader0, reader1, reader2);reader.Close();catch (Exception ex)Console.WriteLine(ex.Message);Conso

27、le.ReadLine(); ,15.6 示例,例:删除学生纪录 using System; using System.Data; using System.Data.SqlClient;class Delete static void Main()string connectionString =“Data Source=(local);Initial Catalog=S_T;“+ “Integrated Security=true“;string queryString =“Delete Student where SNo=SNo“;string mSNo = Console.ReadLi

28、ne();,15.6 示例,using (SqlConnection connection =new SqlConnection(connectionString)SqlCommand command = new SqlCommand(queryString, connection);SqlParameter parameter = command.Parameters.Add(“SNo“, SqlDbType.Char, 9);command.Parameters“SNo“.Value = mSNo;tryconnection.Open();command.ExecuteNonQuery();catch (Exception ex)Console.WriteLine(ex.Message); ,15.7 小结,ODBC目的:为了提高应用系统与数据库平台的独立性,使得应用系统的移植变得容易 ODBC优点: 使得应用系统的开发与数据库平台的选择、数据库设计等工作并行进行 方便移植 大大缩短整个系统的开发时间,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报