《第8章_C#数据库编程.ppt》由会员分享,可在线阅读,更多相关《第8章_C#数据库编程.ppt(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第第第8 8章章章章 ODBCODBC及及及及C#C#数据库编程数据库编程数据库编程数据库编程目前,众多的厂商推出了行行色色的数据库系统,它们在性能、价格和应用范围上各有千秋。一个综合信息系统的各部门由于需求差异等原因,往往会存在多种数据库,它们之间的互连访问成为一个棘手的问题,特别是当用户需要从客户机端访问不同的服务器时。微软提出的开放式数据库互连(Open DataBase Connectivity,即ODBC)成为目前一个强有力解决方案,并逐步成为Windows和Macintosh平台上的标准接口,并推动了这方面的开放性和标准化。ODBCODBC关系型数据库产生后很快就成为数据库系统的
2、主流产品,由于每个DBMS厂商都有自己的一套标准,人们很早就产生了标准化的想法,于是产生了SQL,由于其语法规范逐渐为人所接受,成为RDBMS上的主导语言。最初,各数据库厂商为了解决互连的问题,往往提供嵌嵌入式入式SQL API,用户在客户机端要操作系统中的RDBMS时,往往要在程序中嵌入SQL语句进行预编译。由于不同厂商在数据格式、数据操作、具体实现甚至语法方面都具有不同程度的差异,所以彼此不能兼容。这种API的非规范情况令用户和RDBMS厂商都不能满意。在80年代后期,一些著名的厂商包括Oracle、Sybase、Lotus、Ingres、Informix、HP、DEC等结成了SQL Ac
3、cess Group(简称SAG),提出了SQL API的规范核心:调用级接口(Call Level Interface),简称CLI。一、一、一、一、ODBCODBC的产生和发展的产生和发展的产生和发展的产生和发展1991 年11月,微软宣布了ODBC,次年推出可用版本。1992年2月,推出了ODBC SDK 2.0版。ODBC基于SAG的SQL CAE草案所规定的语法,共分为Core、Level 1、Level 2三种定义,分别规范了22、16、13共51条命令,其中29条命令甚至超越了SAG CLI中原有的定义,功能强大而灵活。它还包括标准的错误代码集、标准的连接和登录DBMS方法、标准
4、的数据类型表示等。由于ODBC思想上的先进性,且没有同类的标准或产品与之竞争,它一枝独秀,推出后仅仅两三年就受到了众多厂家与用户的青睐,成为一种广为接受的标准。目前,已经有130多家独立厂商宣布了对ODBC的支持,常见的DBMS都提供了ODBC的驱动接口,这些厂商包括Oracle、Sybase、Informix、Ingres、IBM(DB/2)、DEC(RDB)、HP(ALLBASE/SQL)、Gupta、Borland(Paradox)等。目前,ODBC已经成为客户机/服务器系统中的一个重要支持技术。二、二、ODBC的基本思想与特点的基本思想与特点ODBC的基本思想是为用户提供简单、标准、透
5、明的数据库连接的公共编程接口,开发厂商根据ODBC的标准去实现底层的驱动程序,这个驱动对用户是透明的,并允许根据不同的DBMS采用不同的技术加以优化实现,这就利于不断吸收新的技术而趋完善。这同时也就是数据库驱动的思想,它很类似于Windows中打印驱动的思想。在Windows中,用户安装不同的打印驱动程序,使用同样一条打印语句或操作,就可很容易地实现在不同打印机上打印输出,而不需要了解内部的具体原理。ODBC出现以后,用户安装不同的DBMS驱动就可用同样的SQL语句实现在不同DBMS上进行同样的操作,而且无需预编译。ODBC带来了数据库连接方式的变革,在传统方式中,开发人员要熟悉多个DBMS及
6、其 API,一旦DBMS端出现变动,则往往导致用户端系统重新编建或者源代码的修改,这给开发和维护工作带来了很大困难。在ODBC方式中,不管底层网络环境如何,也无论采用何种DBMS,用户在程序中都使用同一套标准代码,无需逐个了解各DBMS及其API的特点,源程序不因底层的变化而重新编建或修改,从而减轻了开发维护的工作量,缩短了开发周期。ODBC工作原理概述工作原理概述ODBC应用系统的体系结构应用系统的体系结构:一、用户应用程序 二、驱动程序管理器 三、数据库驱动程序四、ODBC数据源管理 ODBC访问数据库的工作流程访问数据库的工作流程客户程序A客户程序BODBC驱动程序管理器DBMS-A驱动
7、程序DBMS-B驱动程序数据库A数据库B应用程序应用程序使用ODBC接口的应用程序可执行以下任务:请求与数据源的连接和会话(SQLConnect);向数据源发送SQL请求(SQLExecDirct或SQLExecute);对SQL请求的结果定义存储区和数据格式;请求结果;处理错误;如果需要,把结果返回给用户;对事务进行控制,请求执行或回退操作(SQLTransact);终止对数据源的连接(SQLDisconnect)。驱动程序管理器驱动程序管理器 由微软提供的驱动程序管理器是带有输入库的动态连接库ODBC.DLL,其主要目的是装入驱动程序,此外还执行以下工作:处理几个ODBC初始化调用;为每一
8、个驱动程序提供ODBC函数入口点;为ODBC调用提供参数和次序验证。数据库驱动程序数据库驱动程序驱动程序是实现ODBC函数和数据源交互的DLL,当应用程序调用SQL Connect或者SQLDriver Connect函数时,驱动程序管理器装入相应的驱动程序,它对来自应用程序的ODBC函数调用进行应答,按照其要求执行以下任务:建立与数据源的连接;向数据源提交请求;在应用程序需求时,转换数据格式;返回结果给应用程序;将运行错误格式化为标准代码返回;在需要时说明和处理光标。ODBC数据源管理数据源管理 数据源:是最终用户需要访问的数据,包含了数据库位置和数据库类型等信息,是一种数据连接的抽象 数据
9、源对最终用户是透明的 ODBC给每个被访问的数据源指定唯一的数据源名(Data Source Name,简称DSN),并映射到所有必要的、用来存取数据的低层软件在连接中,用数据源名来代表用户名、服务器名、所连接的数据库名等最终用户无需知道DBMS或其他数据管理软件、网络以及有关ODBC驱动程序的细节开放数据库互连(Open Database Connectivity ODBC)ODBC是一个函数库,它提供了一个连接到底层数据库系统的公共应用程序接口 通过一个库驱动程序与底层数据库进行通信 通过ODBC可以使得数据库的更改变得非常容易,对应用程序来说只需改换一下驱动程序。查询不同的数据库,可以采
10、用相同的代码,而无需或者仅需极少地进行代码修改。通过ODBC访问数据库的基本步骤如下:创立并配置数据源;建立一个与数据源的对话连接;向数据源发出SQL请求;定义一个缓冲区和数据格式用于存储访问结果;提取结果;处理各种错误;向用户报告结果;关闭与数据源的连接 ODBC数据源的配置数据源的配置odbc中提供三种DSN。用户DSN只能用于本用户。系统DSN和文件DSN的区别在于连接信息的存放位置不同:系统DSN存放在odbc储存区里,而文件DSN则放在一个文本文件中ODBC(开放数据库互连开放数据库互连)是是 Microsoft引引进的一种早期数据库接口技术。进的一种早期数据库接口技术。它实际上是它
11、实际上是ADO的前身。的前身。ODBC、OLE DB及及ADOODBC(Open database connectivity)配置ODBC的步骤OLE DBADOODBCODBC:微软开发的用于连接各种关系型数据库的函数库,以动态链接库的形式提供给程序使用,其目的是给出统一的编程接口,从而简化数据库应用程序的编写。ODBC的构成:主要包括ODBC驱动程序管理器(odbc32.dll)及ODBC驱动程序(如:Oracle的驱动包含在sqora32.dll)。应用程序与驱动程序管理器交互,驱动程序管理器作用于数据库的对应驱动程序与数据库进行交互,不同的数据库产品用不同的驱动程序。OLE DB微软用
12、于替代ODBC的基于COM的方案其目的是给出操作各种数据源的统一编程接口。主要由OLE DB 提供者构成,相当于ODBC中的驱动程序。ADO(ActiveX Data Objects)在OLE DB函数库基础上,再次封装的一系列函数库,使得用户对OLE DB的使用更加简单。在各种Windows编程工具上,一般都提供了对ADO的支持,使用方式基本相同。同样,在ODBC基础上,也再次封装了另外的函数库:DAO及RDO。DAO及RDO是过时的技术。C#C#数据库编程数据库编程数据库编程数据库编程Connection(连接)连接)要访问数据库中的数据,首先需要建立与该数据库要访问数据库中的数据,首先需
13、要建立与该数据库的连接。的连接。在在.NET Framework 2.0中提供了中提供了DbConnection类类 名称名称描述描述ConnectionStringConnectionString属属性性获取或设置用于打开数据库连接的字符串。获取或设置用于打开数据库连接的字符串。OpenOpen()()方法方法使用使用 ConnectionStringConnectionString所指定的设置打开数据库所指定的设置打开数据库连接。连接。CloseClose()()方法方法关闭与数据库的连接。关闭与数据库的连接。StateState属性属性获取描述连接状态的字符串,获取描述连接状态的字符串,
14、OpenOpen表示打开状表示打开状态,态,ClosedClosed表示关闭状态。表示关闭状态。DbConnection子类子类OdbcConnection:对象表示到数据源的唯一连接,该对象表示到数据源的唯一连接,该数据源是通过使用连接字符串或数据源是通过使用连接字符串或 ODBC 数据源名称数据源名称(DSN)创建的创建的 OleDbConnection:对象表示到数据源的一个唯一的连对象表示到数据源的一个唯一的连接。接。OracleConnection:对象表示到对象表示到 Oracle 数据库的一个数据库的一个唯一的连接。唯一的连接。SqlConnection:对象表示与对象表示与 S
15、QL Server 数据源的一数据源的一个唯一的连接。个唯一的连接。Connection对象的使用对象的使用string connStr=Data Source=.;Initial Catalog=dbShopping;Integrated Security=True“SqlConnection connShopping;connShopping=new SqlConnection();connShopping.ConnectionString=connStr;connShopping.Open();string status=connShopping.State;connShopping.C
16、lose();配置数据库连接串配置数据库连接串创建连接对象创建连接对象设置连接串设置连接串打开连接对象打开连接对象关闭连接对象关闭连接对象connShopping=new SqlConnection(connStr);Command(命令)命令)对象对象当对数据源执行当对数据源执行 SQL 语句或存储过程时,我们可以使用命令对象。语句或存储过程时,我们可以使用命令对象。在在.NET Framework 2.0中提供了中提供了DbCommand类。类。名称名称描述描述CommandText属性属性获取或设置针对数据源运行的获取或设置针对数据源运行的文本命令。文本命令。Connection属性属性
17、获取或设置此获取或设置此 DbCommand 使使用的用的 DbConnection。ExecuteNonQuery()方法方法对连接对象执行对连接对象执行 SQL 语句。语句。DbCommand的子类的子类 OdbcCommand OdbcConnectionOleDbCommand OleDbConnection OracleCommand OracleConnection SqlCommand SqlConnection使用使用DbCommand对象对象 int result;OleDbConnection conn;OleDbCommand deleteItem;conn=new Ol
18、eDbConnection(Provider=SQLOLEDB;Data Source=.;User ID=sa;Initial Catalog=dbShopping);conn.Open();string strSql=delete from Customer where iCustomerId=1;deleteItem=new OleDbCommand();deleteItem.Connection=conn;deleteItem.CommandText=strSqlresult=deleteItem.ExecuteNonQuery();Console.WriteLine(影响的行数为:+
19、result.ToString();执行命令对象执行命令对象创建命令对象创建命令对象deleteItem=new OleDbCommand(strSql,conn);DataReader(数据读取器)数据读取器)数据读取器用来以只读或只向前模式来从数据源中检索数据。数据读取器用来以只读或只向前模式来从数据源中检索数据。数据读取器使用数据读取器使用Connection对象来连接数据库,使用对象来连接数据库,使用Command对象对象类执行类执行SQL语句或数据库中的过程语句或数据库中的过程 以顺序模式检索数据以顺序模式检索数据 在在.NET Framework 2.0提供了提供了DbDataRe
20、ader 类类 名称名称描述描述HasRows属性属性获取一个值,它指示此获取一个值,它指示此 DbDataReader 是是否包含一个或多个行。否包含一个或多个行。Read()()方法方法将读取器前进到结果集中的下一个记录。将读取器前进到结果集中的下一个记录。NextResult()()方方法法读取批处理语句的结果时,使读取器前进读取批处理语句的结果时,使读取器前进到下一个结果。到下一个结果。Close()()方法方法关闭关闭DbDataReader对象。对象。DbDataReader的子类的子类 OdbcDataReaderOleDbDataReaderOracleDataReaderSq
21、lDataReader在使用这些对象时,要创建与读取器对象一致的命令对象在使用这些对象时,要创建与读取器对象一致的命令对象和连接对象,即命令对象、连接对象和读取器对象的前缀和连接对象,即命令对象、连接对象和读取器对象的前缀要相同。要相同。使用数据读取器对象使用数据读取器对象 OleDbConnection conn;OleDbCommand selectCutomer;OleDbDataReader dataReader;conn=new OleDbConnection(Provider=SQLOLEDB;Data Source=.;User ID=sa;Initial Catalog=dbS
22、hopping);conn.Open();selectCutomer=new OleDbCommand(select*from Customer,conn);dataReader=selectCutomer.ExecuteReader();while(dataReader.Read()Console.WriteLine(Customer Name:+dataReader1);dataReader.Close();创建数据读取器对象关闭关闭数据读取器对象DataSet(数据集)数据集)DataSet是从数据源中检索到的数据在内存中的缓存。是从数据源中检索到的数据在内存中的缓存。DataSet就像
23、一个数据库,其中包含表、行、列和关系。就像一个数据库,其中包含表、行、列和关系。数据集通常与数据适配器一起使用。数据集通常与数据适配器一起使用。DataAdapter(数据适配器)数据适配器)DataAdapter 用作用作 DataSet 和数据源之间的桥接器以便检索和保存和数据源之间的桥接器以便检索和保存数据。数据。OleDbDataAdapter、OdbcDataAdapter、SqlDataAdapter、OracleDataAdapter是是DataAdapter 的子类。的子类。名称名称描述描述DeleteCommand属性属性 获取或设置用于从数据集中删除记录的命令。获取或设置用
24、于从数据集中删除记录的命令。InsertCommand属性属性获取或设置用于将新记录插入到数据源中的命令。获取或设置用于将新记录插入到数据源中的命令。SelectCommand属性属性获取或设置用于在数据源中选择记录的命令。获取或设置用于在数据源中选择记录的命令。UpdateCommand属属性性获取或设置用于更新数据源中的记录的命令。获取或设置用于更新数据源中的记录的命令。Fill()()方法方法在在 DataSet 中添加或刷新行以匹配使用中添加或刷新行以匹配使用 DataSet 名名称的数据源中的行。称的数据源中的行。Update()()方法方法从名为从名为“Table”的的 DataT
25、able 为指定的为指定的 DataSet 中每个已插入、已更新或已删除的行调用相应中每个已插入、已更新或已删除的行调用相应的的 INSERT、UPDATE 或或 DELETE 语句。语句。使用使用DataAdapter对象对象 OleDbConnection conn;OleDbDataAdapter daCustomer;DataSet dsCustomer;string strSql=select*from Customer;conn=new OleDbConnection(Provider=SQLOLEDB;Data Source=.;User ID=sa;Initial Catalog=dbShopping);conn.Open();dsCustomer=new DataSet();daCustomer=new OleDbDataAdapter(strSql,conn);daCustomer.Fill(dsCustomer);Console.WriteLine(the number of records is:0,dsCustomer.Tables0.Rows.Count);/输出检索出数据的行数 创建数据集对象创建创建数据适配器对象填充数据集