第三篇数据库编程 第一章基本概念 ASPNET中的 ADONET和ASP中的ADO相对应,它是ADO的改进版本。在 ADO NET 中,通过 Managed Provider所提供的应用程序编程接口(API),可以轻松地访问各种数据源 的数据,包括 OLEDB所支持的和ODBC支持的数据库 下面介绍 ADO. NET中最重要的两个概念: Managed Provider和 DataS 3.1.1 Managed Provider 过去,通过ADO的数据存取采用了两层的基于连接的编程模型。随着多层应用的需 求不但增加,程序员需要一个无连接的模型。 ADO. NET就应运而生了。 ADONET的 Managed P' rovider就是一个多层结构的无连接的一致的编程模型 Dalce lanman Explan careen 典DoBr PIpetle Updak conman Panel Dele cannan! Paneer Propert Talel,toppin Cctm nlypplngs cdunnlappr Managed Provider提供了 DataSet和数据中心(如 MS SQL)之间的联系。 Managed Provider包含了存取数据中心(数据库)的一系列接口。主要有三个部件: ●连接对象 Connection、命令对象 Command、参数对象 Parameter提供了数据源和 DataSet之间的接口。 DataSetcommand接口定义了数据列和表映射,并最终取回 个 DataSet ●数据流提供了高性能的、前向的数据存取机制。通过 IdataReader,你可以轻松而 高效地访问数据流 更底层的对象允许你连接到数据库,然后执行数据库系统一级的特定命令。 过去,数据处理主要依赖于两层结构,并且是基于连接的。连接断开,数据就不能再 存取。现在,数据处理被延伸到三层以上的结构,相应地,程序员需要切换到无连接的应用 模型。这样, DataSetCommand就在 ADO. NET中扮演了极其重要的角色。它可以取回一个
第三篇 数据库编程 第一章 基本概念 ASP.NET中的ADO.NET 和ASP中的ADO相对应,它是ADO的改进版本。在ADO.NET 中,通过 Managed Provider 所提供的应用程序编程接口(API),可以轻松地访问各种数据源 的数据,包括 OLEDB 所支持的和 ODBC 支持的数据库。 下面介绍 ADO.NET 中最重要的两个概念:Managed Provider 和 DataSet。 3.1.1 Managed Provider 过去,通过 ADO 的数据存取采用了两层的基于连接的编程模型。随着多层应用的需 求不但增加,程序员需要一个无连接的模型。ADO.NET 就应运而生了。ADO.NET 的 Managed Provider 就是一个多层结构的无连接的一致的编程模型。 Managed Provider 提供了 DataSet 和数据中心(如 MS SQL)之间的联系。Managed Provider 包含了存取数据中心(数据库)的一系列接口。主要有三个部件: ⚫ 连接对象 Connection、命令对象 Command、参数对象 Parameter 提供了数据源和 DataSet 之间的接口。DataSetCommand 接口定义了数据列和表映射,并最终取回一 个 DataSet。 ⚫ 数据流提供了高性能的、前向的数据存取机制。通过 IdataReader,你可以轻松而 高效地访问数据流。 ⚫ 更底层的对象允许你连接到数据库,然后执行数据库系统一级的特定命令。 过去,数据处理主要依赖于两层结构,并且是基于连接的。连接断开,数据就不能再 存取。现在,数据处理被延伸到三层以上的结构,相应地,程序员需要切换到无连接的应用 模型。这样,DataSetCommand 就在 ADO.NET 中扮演了极其重要的角色。它可以取回一个
DataSet,并维护一个数据源和 DataSet之间的“桥”,以便于数据访问和修改、保存 DataSetCommand自动将数据的各种操作变换到数据源相关的合适的SQL语句。从图上可以 看出,四个 Command对象: Selectcommand、 Insert command、 Update Command、 DeleteCommand分别代替了数据库的查询、插入、更新、删除操作 Managed Provider利用本地的 OLEDB通过 COM Interop来实现数据存取。 OLEDB支 持自动的和手动的事务处理。所以, Managed Provider也提供了事务处理的能力。 3.1.2 DataSet DataSet是 ADONET的中心概念。你可以把 DataSet想象成内存中的数据库。正是由于 DataSet,才使得程序员在编程序时可以屏蔽数据库之间的差异,从而获得一致的编程模型: Datcet Re scoleco Erte i d dP ppe齿 Tabasco影c1 DatTabP DeRuta CiRE Ltbi p are itRe tons constant ColI IS Et nded lope tes Darcon I DataSet支持多表、表间关系、数据约東等等。这些和关系数据库的模型基本一致 3.1.2.1 Tablescol lection对象 DataSet里的表(Iabe)是用 Data Table来表示的。 DataSet可以包含许多 DataTable,这些 DataTable构成 TablesCollection对象 DataTable定义在 System. Data中,它代表内存中的一张表( Table)。它包含一个称为
DataSet,并维护一个数据源和 DataSet 之间的“桥”,以便于数据访问和修改、保存。 DataSetCommand 自动将数据的各种操作变换到数据源相关的合适的 SQL 语句。从图上可以 看出,四个 Command 对 象 : SelectCommand 、 InsertCommand 、 UpdateCommand 、 DeleteCommand 分别代替了数据库的查询、插入、更新、删除操作。 Managed Provider 利用本地的 OLEDB 通过 COM Interop 来实现数据存取。OLEDB 支 持自动的和手动的事务处理。所以,Managed Provider 也提供了事务处理的能力。 3.1.2 DataSet DataSet 是 ADO.NET 的中心概念。你可以把 DataSet 想象成内存中的数据库。正是由于 DataSet,才使得程序员在编程序时可以屏蔽数据库之间的差异,从而获得一致的编程模型: DataSet 支持多表、表间关系、数据约束等等。这些和关系数据库的模型基本一致。 3.1.2.1 TablesCollection 对象 DataSet 里的表(Table)是用 DataTable 来表示的。DataSet 可以包含许多 DataTable,这些 DataTable 构成 TablesCollection 对象。 DataTable 定义在 System.Data 中,它代表内存中的一张表(Table)。它包含一个称为
ColumnsCollection的对象,代表数据表的各个列的定义。 DataTable也包含一个 RowsCollection对象,这个对象含有 DataTable中的所有数据。 DataTable保存有数据的状态。通过存取 Data Table的当前状态,你可以知道数据是否被 更新或者删除。 3.1.2.2 Relationscol lection对象 各个 DataTable之间的关系通过 DataRelation来表达,这些 DataRelation形成一个集合, 称为 Relations collection,它是 DataSet的子对象。 Data Relation表达了数据表之间的主键 外键关系,当两个有这种关系的表之中的某一个表的记录指针移动时,另一个表的记录指针 也随之移动。同时,一个有外键的表的记录更新时,如果不满足主键外键约束,更新就会 失败 通过建立各个 Data table之间的 DataRelation,可以轻松实现在ASP中需要通过 DataSharing才能实现的功能 3.1.2.3 ExtendedProperties对象 在这个对象里可以定义特定的信息,比如密码、更新时间等 3.1.24小结 本章首先介绍在 asp. net中数据库编程的两个基本概念 Managed Provider和 DataSet。在 asp. net中, DataSet屏蔽了具体数据源和应用之间差异,使得应用摆脱了具体数据的束缚 在我们今后的数据库编程中,可以把 DataSet视为远端数据库在内存中的镜像,把繁琐的数 据库操作任务交给 Managed Provider去做 第二章通过AD0NET访问数据库 3.2.1AD0.NET访问数据库的步骤 不论从语法来看,还是从风格和设计目标来看, ADO NET都和ADO有显著的不同。 在ASP中通过ADO访问数据库,一般要通过以下四个步骤 创建一个到数据库的链路,即 ADO Connection 2、查询一个数据集合,即执行SQL,产生一个 Recordset 3、对数据集合进行需要的操作; 4、关闭数据链路 在 ADO. NET里,这些步骤有很大的变化。 ADO NET的最重要概念之一是 DataSet DataSet是不依赖于数据库的独立数据集合。所谓独立,就是:即使断开数据链路,或者关
ColumnsCollection 的对象,代表数据表的各个列的定义。 DataTable 也包含一个 RowsCollection 对象,这个对象含有 DataTable 中的所有数据。 DataTable 保存有数据的状态。通过存取 DataTable 的当前状态,你可以知道数据是否被 更新或者删除。 3.1.2.2 RelationsCollection 对象 各个 DataTable 之间的关系通过 DataRelation 来表达,这些 DataRelation 形成一个集合, 称为 RelationsCollection,它是 DataSet 的子对象。DataRelation 表达了数据表之间的主键- 外键关系,当两个有这种关系的表之中的某一个表的记录指针移动时,另一个表的记录指针 也随之移动。同时,一个有外键的表的记录更新时,如果不满足主键-外键约束,更新就会 失败。 通过建立各个 DataTable 之间的 DataRelation,可以轻松实现在 ASP 中需要通过 DataShaping 才能实现的功能。 3.1.2.3 ExtendedProperties 对象 在这个对象里可以定义特定的信息,比如密码、更新时间等。 3.1.2.4 小结 本章首先介绍在 asp.net 中数据库编程的两个基本概念 Managed Provider 和 DataSet。在 asp.net 中,DataSet 屏蔽了具体数据源和应用之间差异,使得应用摆脱了具体数据的束缚。 在我们今后的数据库编程中,可以把 DataSet 视为远端数据库在内存中的镜像,把繁琐的数 据库操作任务交给 Managed Provider 去做。 第二章 通过 ADO.NET 访问数据库 3.2.1 ADO.NET 访问数据库的步骤 不论从语法来看,还是从风格和设计目标来看,ADO.NET 都和 ADO 有显著的不同。 在 ASP 中通过 ADO 访问数据库,一般要通过以下四个步骤: 1、 创建一个到数据库的链路,即 ADO.Connection; 2、 查询一个数据集合,即执行 SQL,产生一个 Recordset; 3、 对数据集合进行需要的操作; 4、 关闭数据链路。 在 ADO.NET 里,这些步骤有很大的变化。ADO.NET 的最重要概念之一是 DataSet。 DataSet 是不依赖于数据库的独立数据集合。所谓独立,就是:即使断开数据链路,或者关
闭数据库, DataSet依然是可用的。如果你在ASP里面使用过非连接记录集合( Connectionless Recordset),那么 DataSet就是这种技术的最彻底的替代品。 有了 DataSet,那么, ADO. NET访问数据库的步骤就相应地改变了 创建一个数据库链路 请求一个记录集合 把记录集合暂存到 DataSet 如果需要,返回第2步;( DataSet可以容纳多个数据集合) 关闭数据库链路 在 DataSet上作所需要的操作 DataSet在内部是用XML来描述数据的。由于XML是一种平台无关、语言无关的数据 描述语言,而且可以描述复杂数据关系的数据,比如父子关系的数据,所以 DataSet实际上 可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。 3.2.2AD0.NET对象模型概览 3.2.21 ADOConnection ADO NET有许多对象,我们先看看最基本的也最常用的几个。首先看看 ADOConnection。和ADO的 ADODB Connection对象相对应, ADOConnection维护一个到 数据库的链路。为了使用 ADO. NET对象,我们需要引入两个 NameSpace: System. Data和 System Data. ADO,使用 ASPNET的 Import指令就可以了 <%( Import Namespace="System. Data"%> <% Import Namespace="System. Data ADO"%> 和ADO的 Connection对象类似, ADOConnection对象也有Open和 Close两个方法。下面 的这个例子展示了如何连接到本地的 MS SQL Server上的Pubs数据库。 <% Import Namespace="System. Data"%> <% Import Namespace="System. Data ADO"%> 设置连接串 ConnString="Provider=SQLOLEDB; Data Source=(local); " Initial Catalog=pubs; User ID=sa 创建对象 ADOConnection Dim objConn as ADOConnection obj Conn= New ADOConnection 设置 ADOCOnnection对象的连接串 objConn. ConnectionString= strConnString
闭数据库,DataSet 依然是可用的。如果你在 ASP 里面使用过非连接记录集合(Connectionless Recordset),那么 DataSet 就是这种技术的最彻底的替代品。 有了 DataSet,那么,ADO.NET 访问数据库的步骤就相应地改变了: ⚫ 创建一个数据库链路; ⚫ 请求一个记录集合; ⚫ 把记录集合暂存到 DataSet; ⚫ 如果需要,返回第 2 步;(DataSet 可以容纳多个数据集合) ⚫ 关闭数据库链路; ⚫ 在 DataSet 上作所需要的操作。 DataSet 在内部是用 XML 来描述数据的。由于 XML 是一种平台无关、语言无关的数据 描述语言,而且可以描述复杂数据关系的数据,比如父子关系的数据,所以 DataSet 实际上 可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。 3.2.2 ADO.NET 对象模型概览 3.2.2.1 ADOConnection ADO.NET 有许多对象,我们先看看最基本的也最常用的几个。首先看看 ADOConnection。和 ADO 的 ADODB.Connection 对象相对应,ADOConnection 维护一个到 数据库的链路。为了使用 ADO.NET 对象,我们需要引入两个 NameSpace:System.Data 和 System.Data.ADO,使用 ASP.NET 的 Import 指令就可以了: <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.ADO" %> 和 ADO 的 Connection 对象类似,ADOConnection 对象也有 Open 和 Close 两个方法。下面 的这个例子展示了如何连接到本地的 MS SQL Server 上的 Pubs 数据库。 <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.ADO" %> <% '设置连接串... Dim strConnString as String strConnString = "Provider=SQLOLEDB; Data Source=(local); " & _ "Initial Catalog=pubs; User ID=sa" '创建对象 ADOConnection Dim objConn as ADOConnection objConn = New ADOConnection '设置 ADOCOnnection 对象的连接串 objConn.ConnectionString = strConnString
obj Conn. Open打开数据链路 数据库操作代码省略 obj Conn. Close(‘关闭数据链路 obj Conn= Nothing·清除对象 % 上面的代码和ADO没有什么太大的差别。应该提到的是, ADO NET提供了两种数据库连 接方式:ADO方式和SQL方式。这里我们是通过ADO方式连接到数据库。关于建立数据 库连接的详细信息,我们在后面的篇幅中将会讲到 3.2.22 ADODatasetcommand 另一个不得不提到的 ADO NET对象是 ADODatasetCommand,这个对象专门负责创建 我们前面提到的 DataSet对象。另一个重要的 ADO.NET对象是 Dataview,它是 DataSet的 个视图。还记得 DataSet可以容纳各种各种关系的复杂数据吗?通过 Dataview,我们可以 把 DataSet的数据限制到某个特定的范围。 下面的代码展示了如何利用 ADODatasetcommand为 DataSet填充数据 创建SQL字符串 Dim str SQL as String="SELECT* FROM authors 创建对象 ADODataset Command和 Dataset Dim objDSCommand as ADODataset Command Dim obj Dataset as Dataset= New Dataset objDS Command=New ADODatasetCommand(strS QL, obj Conn) 填充数据到 Dataset 并将数据集合命名为" Author Information" obj DSCommand Fill DataSet(obj Dataset, "Author Information") 323显示 Dataset 前面我们己经把数据准备好。下面我们来看看如何显示 Dataset中的数据。在 ASPNET 中,显示 DataSet的常用控件是 Datagrid,它是 ASPNET中的一个HIML控件,可以很好 地表现为一个表格,表格的外观可以任意控制,甚至可以分页显示。这里我们只需要简单地 使用它 asp Data Grid id="Data"runat="server"/> 剩下的任务就是把 Dataset绑定到这个 Datagrid,绑定是 ASPNET的重要概念,我们将另文 讲解。一般来说,你需要把一个 Dataview绑定到 DataGrid,而不是直接绑定 Dataset。好在
objConn.Open() '打开数据链路 '数据库操作代码省略 objConn.Close() '关闭数据链路 objConn = Nothing '清除对象 %> 上面的代码和 ADO 没有什么太大的差别。应该提到的是,ADO.NET 提供了两种数据库连 接方式:ADO 方式和 SQL 方式。这里我们是通过 ADO 方式连接到数据库。关于建立数据 库连接的详细信息,我们在后面的篇幅中将会讲到。 3.2.2.2 ADODatasetCommand 另一个不得不提到的 ADO.NET 对象是 ADODatasetCommand,这个对象专门负责创建 我们前面提到的 DataSet 对象。另一个重要的 ADO.NET 对象是 Dataview,它是 DataSet 的 一个视图。还记得 DataSet 可以容纳各种各种关系的复杂数据吗?通过 Dataview,我们可以 把 DataSet 的数据限制到某个特定的范围。 下面的代码展示了如何利用 ADODatasetCommand 为 DataSet 填充数据: '创建 SQL 字符串 Dim strSQL as String = "SELECT * FROM authors" '创建对象 ADODatasetCommand 和 Dataset Dim objDSCommand as ADODatasetCommand Dim objDataset as Dataset = New Dataset objDSCommand = New ADODatasetCommand(strSQL, objConn) '填充数据到 Dataset '并将数据集合命名为 "Author Information" objDSCommand.FillDataSet(objDataset, "Author Information") 3.2.3 显示 Dataset 前面我们已经把数据准备好。下面我们来看看如何显示 Dataset 中的数据。在 ASP.NET 中,显示 DataSet 的常用控件是 DataGrid,它是 ASP.NET 中的一个 HTML 控件,可以很好 地表现为一个表格,表格的外观可以任意控制,甚至可以分页显示。这里我们只需要简单地 使用它: <asp:DataGrid id="DataGridName" runat="server"/> 剩下的任务就是把 Dataset 绑定到这个 DataGrid,绑定是 ASP.NET 的重要概念,我们将另文 讲解。一般来说,你需要把一个 Dataview 绑定到 DataGrid,而不是直接绑定 Dataset。好在