第19章数据访问技术 主要内容 本章主要讲解数据访问技术,学习的目标包括:了解关系数 据库模型,理解AD○NET的数据访问模型,掌握通过 ADO NET对数据库进行访问。最后的实例分析的目标是编写 个用于数据库存取的 Windows forms应用程序,通过 ADO.NET对记录的数据进行增加、删除、修改,并将修改后 的内容保存到后台数据库中
第19章 数据访问技术 主要内容 本章主要讲解数据访问技术,学习的目标包括:了解关系数 据库模型,理解ADO.NET的数据访问模型,掌握通过 ADO.NET对数据库进行访问。最后的实例分析的目标是编写 一个用于数据库存取的Windows Forms应用程序,通过 ADO.NET对记录的数据进行增加、删除、修改,并将修改后 的内容保存到后台数据库中
19.1 ADO.NET基本概念 ■19.1.1 ADO.NET数据访问模型 ADO NET Data ad or Command Object lon Object SOL OLE DB. NET Provider OLE DB Interf Oracle Sy base 19. I ADONET数据访问模型
19.1 ADO.NET基本概念 ◼ 19.1.1 ADO.NET数据访问模型 ADO.NET Data Adapter or Command Object Source Code Connection Object OLE DB Interface OLE DB.NET Provider Oracle Server Oracle Server SQL SQL Data Base SQL Oracle Sybase Access foxpro …… …… 图19.1 ADO.NET数据访问模型
19.12 ADO NET数据类 般一个关系数据库由一系列表( table)组成,每张表由n行 m列数据构成,每行称为一条记录( record/row),每列表示 个字段( field/ olumn),值惟一的是主关键字,或称为主 键,一张表有一个或多个主键。各个表之间可能有某种关系 例如某个主键在两张表中都出现,可以将两张表的信息对应 起来。可以通过SQL语句来查询、操作数据 ADO.NET提供了对应于数据库的共享类和对应于数据库操作 的特定类。 ADO.NET是以 DataSet作为运作的核心, DataSet的 底层是以XML来描述的
19.1.2 ADO.NET数据类 一般一个关系数据库由一系列表(table)组成,每张表由n行 m列数据构成,每行称为一条记录(record/row),每列表示 一个字段(field/column),值惟一的是主关键字,或称为主 键,一张表有一个或多个主键。各个表之间可能有某种关系, 例如某个主键在两张表中都出现,可以将两张表的信息对应 起来。可以通过SQL语句来查询、操作数据。 ADO.NET提供了对应于数据库的共享类和对应于数据库操作 的特定类。ADO.NET是以DataSet作为运作的核心,DataSet的 底层是以XML来描述的
ADO.NET提供的主要共享类 DataSet类:表示数据在内存中的缓存,对应于一个关系数据库的结构 由一组 DataTable对象组成。 ● DataTable类:表示内存中数据的一个表,对应于数据库中的表,由若 干行和列组成。 DataRow类:表示 DataTable中的一行数据,对应于数据库中表的一行 ● DataColumn类:表示 DataTable中列的结构,对应于数据库中表的一列 DataRelation类:表示两个 DataTable对象之间的关联,如父/子关系,此 关系类似于主键/外键关系。 Constraint类:表示可在一个或多个 DataColumn对象上强制的约束。约 束是用于维护 DataTable中数据的完整性的规则 DataTable Collection, DataRelation Collection g Qint Collection 其他类:如 DataColumn Collection、 Constr
ADO.NET提供的主要共享类 ⚫ DataSet类:表示数据在内存中的缓存,对应于一个关系数 据库的结构。 由一组DataTable对象组成。 ⚫ DataTable类:表示内存中数据的一个表,对应于数据库中的表,由若 干行和列组成。 ⚫ DataRow类:表示DataTable中的一行数据,对应于数据库中表的一行。 ⚫ DataColumn类:表示DataTable中列的结构,对应于数据库中表的一列。 ⚫ DataRelation类:表示两个DataTable对象之间的关联,如父/子关系,此 关系类似于主键/外键关系。 ⚫ Constraint类:表示可在一个或多个DataColumn对象上强制的约束。约 束是用于维护DataTable中数据的完整性的规则。 ⚫ 其他类:如DataColumnCollection、ConstraintCollection、 DataTableCollection、DataRelationCollection等
AD○NET数据访问应用程序的编写 192.1AD○NET处理数据库的流程 连接指定)数据库(文件) Y 需要编辑数 并记 连接到数据源 连接到数据源 从数据源读取数据 从数据源读取数据 对数据进行操作 对数据进行操作 “读取”∏修改∏添加删除查询 获取一个数据 使用数据库命令 妾受数据更改? 接受 保存到数据库 图192 ADONET处理数据库的简单流程
ADO.NET数据访问应用程序的编写 ◼ 19.2.1 ADO.NET处理数据库的流程 连接(指定)数据库(文件) 需要编辑数据 并返回源/库? Y N 连接到数据源 连接到数据源 从数据源读取数据 对数据进行操作 获取一个数据 使用数据库命令 删除 查询 从数据源读取数据 对数据进行操作 接受数据更改? N 拒绝 保存到数据库 接受 Y “读取” 修改 添加 图19.2 ADO.NET处理数据库的简单流程
19.22 ADO. NET处理数据库的步 骤实现 19.22.1连接到数据库 该步骤用到 Connection对象,该对象负责建立和控制用户应用程序 和数据库之间的连接,不同的供应程序提供了不同的类,其中OLE DB供应程序提供的对象是 System Data. OleDb OleDbConnection,而 S①L供应程序提供的对象则是 ystem Data. Sqlclient. Sqlclient Connection。一个 Connection对象,表 示到数据源的一个唯一的连接,在客户端/服务器数据库系统的情况 下,它等效于到服务器的一个网络连接 所有的连接方式都要用到连接字符串,该字符串使用分号隔开的多 项信息,其内容随着数据库和供应程序而变化,不同的数据库和供 应程序有着不同内容的连接字符串,在 Visual studio.net中能自动一 产生
19.2.2 ADO.NET处理数据库的步 骤实现 ◼ 19.2.2.1 连接到数据库 该步骤用到Connection对象,该对象负责建立和控制用户应用程序 和数据库之间的连接,不同的供应程序提供了不同的类,其中OLE DB供应程序提供的对象是System.Data.OleDb.OleDbConnection,而 SQL供应程序提供的对象则是 System.Data.SqlClient.SqlClientConnection。一个Connection对象,表 示到数据源的一个唯一的连接,在客户端/服务器数据库系统的情况 下,它等效于到服务器的一个网络连接。 所有的连接方式都要用到连接字符串,该字符串使用分号隔开的多 项信息,其内容随着数据库和供应程序而变化,不同的数据库和供 应程序有着不同内容的连接字符串,在Visual Studio.NET中能自动 产生
19.2.2.1连接到数据库 连接 SQL Server数据库,使用 Microsoft ole DB Provider: data source= MyServer; initial catalog- My DataBase user id= My User; password- My Password 连接到Aces数据库,使用 Microsoft Jet OLEDB40: Provider= Microsoft Jet OLEDB40, Data source=盘名:\路径名 数据库文件名mdb Password=xXx, User ID= Admin; 连接到数据库的例子代码如下: string strConn a" Provider=Microsoft Jet OLEDB 4.0 (a" Data Source=D: \ CSExampleichIOBIBLIO MDB OleDbConnection My Conn=new OleDbConnection( str Conn
19.2.2.1 连接到数据库 连接SQL Server数据库,使用Microsoft OLE DB Provider: data source = MyServer; initial catalog = MyDataBase; user id = MyUser; password = MyPassword; 连接到Access数据库,使用Microsoft.Jet.OLEDB.4.0: Provider=Microsoft.Jet.OLEDB.4.0; Data Source=盘名:\路径名\ 数据库文件名.mdb; Password=”xxx”; User ID = Admin; 连接到数据库的例子代码如下: string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=D:\CsExample\ch10\BIBLIO.MDB"; OleDbConnection MyConn = new OleDbConnection( strConn );
19.2.2.2连接到数据源 连接到数据源指的是连到具体数据库文件中的一个表中的数 据,通常有两种方法:一种是使用 DataAdapter对象,另一种 是使用 Command对象和 Datareader对象。 DataAdapter类表示一组数据命令和一个数据库连接,它们用 于填充 DataSet和更新数据源,因此更适用于经常更改数据库 而不想经常写SOL命令的情况 Command对象更适合应用于直接针对数据库发布SQL语句而 不使用 DataSet的情况,即使用 Command对象效率更高,因为 它直接发送SQL命令
19.2.2.2 连接到数据源 连接到数据源指的是连到具体数据库文件中的一个表中的数 据,通常有两种方法:一种是使用DataAdapter对象,另一种 是使用Command对象和DataReader对象。 DataAdapter类表示一组数据命令和一个数据库连接,它们用 于填充DataSet和更新数据源,因此更适用于经常更改数据库 而不想经常写SQL命令的情况。 Command对象更适合应用于直接针对数据库发布SQL语句而 不使用DataSet的情况,即使用Command对象效率更高,因为 它直接发送SQL命令
19.2.2.3从数据源读取数据 ■使用 Dataset对象 使用 DataSet对象时一般是调用 DataAdapter的Fll()方法来填充数 据到 DataSet对象,然后读取数据。例如: DataSet MyDataSet= new DataSet() MyData Adapter. Fill(MyDataSet) 使用 Datareader对象 DataReader类不能被继承,用于仅仅从数据库中读出数据,这些数 据不经过编辑,可以高效地填充GUI界面。不同的数据库和供应程 序,具体使用的对象也不同。 SqlclientDatareade是 Microsoft SQL Server数据库/供应程序使用的,而支持 OLE DB的数据源/供应程序 则使用 OleDbDataReader类
19.2.2.3 从数据源读取数据 ◼ 使用DataSet对象 使用DataSet对象时一般是调用DataAdapter的Fill()方法来填充数 据到DataSet对象,然后读取数据。例如: DataSet MyDataSet = new DataSet( ); MyDataAdapter.Fill(MyDataSet); ◼ 使用DataReader对象 DataReader类不能被继承,用于仅仅从数据库中读出数据,这些数 据不经过编辑,可以高效地填充GUI界面。不同的数据库和供应程 序,具体使用的对象也不同。SqlClientDataReade是Microsoft SQL Server 数据库/供应程序使用的,而支持OLE DB的数据源/供应程序 则使用OleDbDataReader类
19.22.4对数据进行处理 从数据库读取到数据以后就可以对数据进行处理,常见的处理包括 査询、添加、删除和修改等,修改以后的数据可以被接收和拒绝, 即取消已经进行的修改。 由于 DataReader类用于仅仅从数据库中读出数据,因此修改时不使 用该类。对数据进行处理,尤其是可能修改,通常用 DataSet类。另 外一种方法就是使用 Command对象直接发布数据库命令 1.使用 Command命令 2.使用 DataSet对象
19.2.2.4 对数据进行处理 ◼ 2. 使用DataSet对象 从数据库读取到数据以后就可以对数据进行处理,常见的处理包括 查询、添加、删除和修改等,修改以后的数据可以被接收和拒绝, 即取消已经进行的修改。 由于DataReader类用于仅仅从数据库中读出数据,因此修改时不使 用该类。对数据进行处理,尤其是可能修改,通常用DataSet类。另 外一种方法就是使用Command对象直接发布数据库命令。 ◼ 1. 使用Command命令