asp.net 程序设计教程 闫宏亮 潘勇 主编

80
ASP.NET ASP.NET 程程程程程程 程程程程程程 程程程 程程 程程 程程程 程程 程程 上上上上上上上上上

Upload: kobe

Post on 15-Jan-2016

133 views

Category:

Documents


0 download

DESCRIPTION

ASP.NET 程序设计教程 闫宏亮 潘勇 主编. 上海交通大学出版社. 第 9 章 数据库编程. 9.1 连接数据库 9.2 执行 SQL 命令 9.3 使用 DataReader 对象访问数据 9.4 ADO.NET 数据集 9.5 数据显示. 内容. 本章主要介绍了 ASP.NET 编程的数据库访问操作的步骤和方法 ,并重点讲解应用 ADO.NET 模型进行 Web 数据库应用设计 ,以及数据显示控件的使用方法。. 9. 1 连接数据库. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

ASP.NETASP.NET 程序设计教程程序设计教程闫宏亮 潘勇 主编闫宏亮 潘勇 主编

上海交通大学出版社

Page 2: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

2

第第 99 章 数据库编程章 数据库编程

第第 99 章 数据库编程章 数据库编程

9.1 连接数据库

9.2 执行 SQL 命令

9.3 使用 DataReader 对象访问数据

9.4 ADO.NET 数据集

9.5 数据显示

Page 3: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

3

第第 99 章 数据库编程章 数据库编程

内容

本章主要介绍了 ASP.NET 编程的数据库访问操作的步骤和方法 ,并重点讲解应用 ADO.NET 模型进行 Web 数据库应用设计 ,以及数据显示控件的使用方法。

Page 4: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

4

第第 99 章 数据库编程章 数据库编程

9. 1 连接数据库

每个需要和数据库进行交互的应用程序都必须先建立与数据库的连接,对于不同的数据源, ASP.NET 提供了不同的类来建立连接。 OleDbConnection 对象 SqlConnection 对象

Page 5: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

5

第第 99 章 数据库编程章 数据库编程

9.1.1 Connection 对象简介

1 、 SqlConnection 和 OleDbConnection 类对象定义的语法格式

SqlConnection 类对象定义的语法格式为: SqlConnection 对象名 =new SqlConnection ([Conn

ectionString]) OleDbConnection 类对象定义的语法格式为: OleDbConnection 对象名 =new OleDbConnection

([ConnectionString])

Page 6: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

6

第第 99 章 数据库编程章 数据库编程

如果连接 OLE DB 数据源, ConnectionString 属性通常包含以下参数:

1) Provider :设置数据源的 OLE DB 驱动程序,该参数不能省略。 Access 的驱动程序为“ Microsoft.Jet.OLEDB.4.0” , SQL Server6.5 或之前版本的驱动程序为“ SQLOLEDB” , Oracle 数据库的驱动程序为“ MSDAORA” 。

2) Data Source :设置数据源的实际路径。3) User ID :设置登录数据库的账号。4) Password :设置登录数据库的密码。

Page 7: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

7

第第 99 章 数据库编程章 数据库编程

2 、 Connection 对象的属性、方法和事件

属 性 说 明ConnectionString 设置或取得连接字符串ConnectionTimeou

t获取或设置 Connection对象的超时时间,单位为 s,若在此时间内 Conne

ction对象无法连接数据源,则返回连接失败。值为 0表示不限制

DataBase 获取当前数据库名称,默认为 Nothing

DataSource 获取数据源的完整路径及文件名,若是 SQL Server数据库则获取所连接的 SQL Server服务器名称

PacketSize 获取与 SQL Server通信的网络数据包的大小,单位为字节。默认为 8192。此属性只有 SQL Server数据库才可使用

Provider 获取 OLE DB提供程序的名称。此属性只有 OLE DB数据源可用Server Version 获取数据库驱动程序的版本State 获取数据库的连接状态,范围 1表示连接, 0表示关闭WorkstationId 获取数据库客户端标识。默认为客户端计算机名。此属性只适用于 SQL Se

rver数据库

表 9.1 Connection 对象的常用属性

Page 8: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

8

第第 99 章 数据库编程章 数据库编程

方 法 说 明Open() 打开与数据库的连接。 ConnectionString属性只对连接属性进行了

设置,并未打开与数据库的连接,必须使用该方法打开连接Close() 关闭数据库连接ChangeDatabase

()在打开连接的状态下,更改当前数据库

CreatCommand() 创建并返回与 Connection对象有关的 Command对象Dispose() 调用 Close()方法关闭数据库连接,并释放所占用的系统资源

表 9.2 Connection 对象的常用方法

Page 9: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

9

第第 99 章 数据库编程章 数据库编程

事 件 说 明

InfoMessage 当数据源发送警告或其他信息时触发该事件

StateChange 当数据连接状态改变时触发该事件。例如调用 Open()或 Close()方法打开或关闭数据连接时

表 9.3 Connection 对象的事件

Page 10: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

10

第第 99 章 数据库编程章 数据库编程

9.1.2 连接 ACCESS 数据库// 程序清单 9-1 : using System.Data; using System.Data.OleDb; // 连接 Access 数据库需要导入额外的命名空间 , 必须带此两条 using 命令。 public void OleDbConnectionOpen( ) { string strConnection="Provider=Microsoft.Jet.OleDb.4.0;"; strConnection+=@"Data Source=C:\BegASPNET\Person.mdb"; // 建立连接对象 objConnection ,以后对数据库的操作都要用到该对象 OleDbConnection objConnection=new OleDbConnection(strConnection); objConnection.Open(); // 调用对象 objConnection 的 open() 方法打开连接 } …… objConnection.Close() ; // 关闭连接

Page 11: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

11

第第 99 章 数据库编程章 数据库编程

9.1.3 连接 SQL Server 数据库// 程序清单 9-2 :   using System.Data;   using System.Data.SqlClient;   Public void SqlConnectionOpen( )   {   string strConnection="User ID=sa;Password=;";   strConnection+="Initial Catalog=Northwind;Server=MySQLServe

r;";   strConnection+="Connection Timeout=30";   SqlConnection objConnection=new SqlConnection(strConnectio

n);   objConnection.Open( );   }  ……   objConnection.Close( );

Page 12: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

12

第第 99 章 数据库编程章 数据库编程

说明:在连接数据库的过程中,连接字符串可以在类的构造函数中指定,如上述两种连接方法;另外,在 .NET 开发环境中, SqlConnection 和 OleDbConnection 是数据库连接控件,位于“数据”控件箱中,因此连接字符串也可在 ConnectionString 属性中指定。但无论采用哪种方式指定连接字符串的值,都必须显式调用 Open( ) 方法和 Close( ) 方法来打开和关闭连接。

Page 13: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

13

第第 99 章 数据库编程章 数据库编程

9.2 执行 SQL 命令 数据库访问是程序中应用最普遍的部分,

成功地连接数据库之后,就可以直接编写代码进行数据处理,通常有两种方式,其中一种是在保持连接的状态下利用 Command 对象执行 SQL 命令或存储过程,再通过返回的各种结果对象来访问数据库。

本节将示范四种最基础的数据库操作:读取、插入、更新数据及删除数据。

Page 14: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

14

第第 99 章 数据库编程章 数据库编程

在 ADO.NET 中一般使用 Command 对象执行 SQL 命令并从数据源中返回结果。

常用的 SQL 命令如 SELECT 、 UPDATE 、NSERT 、 DELETE等都可以在 Command 对象中创建。

Page 15: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

15

第第 99 章 数据库编程章 数据库编程创建 Command 对象的语法格式

1) OLE DB 数据库:OleDbCommand 对象名 =new OleDbCommand(cmdText,connection)

2) SQL SERVER 数据库:SqlCommand 对象名 =new SqlCommand(cmdText,connection)

Page 16: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

16

第第 99 章 数据库编程章 数据库编程

Command 对象的属性和方法 属 性 说 明

CommandText 获取或设置要执行的 SQL命令、存储过程或数据表名

CommandTimeout 获取或设置 Command对象的超时时间,单位为 s,若在此时间内 Command对象无法执行 SQL命令,则返回失败。值为 0表示不限制,默认为 30s

CommandType 获取或设置命令类别,可取值: Text, TableDirect, StoreProcedure,其含义分别为: SQL语句、数据表名和存储过程,默认为 Text

Connection 获取或设置 Command对象所使用的数据连接

Parameters SQL命令参数集合

表 9.4 Command 对象的常用属性

Page 17: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

17

第第 99 章 数据库编程章 数据库编程

方 法 说 明

Cancel( ) 取消 Command对象的执行

CreateParameter( ) 创建 Parameter对象

ExecuteNonQuery( ) 执行 CommandText属性指定的内容,返回数据表被影响的行数。只有 Update, Insert和 Delete命令会影响行数。该方法用于执行对数据库的更新操作

ExecuteReader( ) 执行 CommandText属性指定的内容,返回 DataReader对象

ExecuteScalar( ) 执行 CommandText属性指定的内容,返回结果表的第 1行第 1列的值。该方法只能执行 Select命令

ExecuteXmlReader( )

执行 CommandText属性指定的内容,返回 XmlReader对象。只有 SQL SERVER才能用此方法

表 9.5 Command 对象的常用方法

Page 18: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

18

第第 99 章 数据库编程章 数据库编程

[ 例 9.1] 返回 Northwind 数据库的 Employees表中的所有记录。

// 程序清单 9-3 : //生成 SqlCommand 对象 cmd SqlCommand cmd = new SqlCommand ( ); // 给 CommandText 属性赋值 cmd.CommandText =”employees”; // 指定命令类型属性为表名 cmd.CommandType = Command.TableDirect; // 9.1 节定义的 Connection 对象 cmd.Connection = objConnection;

Page 19: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

19

第第 99 章 数据库编程章 数据库编程

以上代码的执行结果是返回 employees表中所有的记录。它等价于以下代码:// 程序清单 9-4 :

SqlCommand cmd = new SqlCommand( ); cmd.CommandText =“Select * from empl

oyees”; cmd.CommandType = Command.Text; cmd.Connection = objConnection;

Page 20: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

20

第第 99 章 数据库编程章 数据库编程

执行 SQL 命令

1 、 ExecuteNonQuery( ) :可以通过该命令来执行除了 SELECT查询以外 ( 如 UPDATE , INSERT 和 DELETE) 的 SQL命令。

[例 9.2] 删除 employees表中所有 TitleofCourtesy 字段值为 Ms. 的记录。

Page 21: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

21

第第 99 章 数据库编程章 数据库编程

思路:(1) 创建并打开一个 SqlConnection 对象;(2) 创建一个修改数据库中记录的 SQL 语句;

(3) 创建一个 SqlCommand 对象;(4) 通过此 SqlCommand 对象完成对更改

一条记录到数据库的操作。

Page 22: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

22

第第 99 章 数据库编程章 数据库编程

2 、 ExecuteScalar( ) :用来执行 SELECT查询命令,但返回的是一个单值,多用于查询聚合值的情况,如用到count( ) 或 sum( ) 函数的 SQL 命令。比如:

int Num; CommandText="select count( * ) from employees

where city=’London’ "; Num=( int ) ExecuteScalar( );3 、 ExecuteReader( ) :该方法返回一个 DataReader

对象,根据使用的提供者不同,返回一个 SqlDataReader 对象或者 OleDbDataReader 对象。 DataReader提供了只向前的快速读取数据库中数据的方法,如果只是为了读取数据库中的内容,最后使用这种方法。

执行 SQL 命令

Page 23: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

23

第第 99 章 数据库编程章 数据库编程

9.3 使用 DataReader 对象访问数据

ADO.NET 有两种访问数据源的方式,分别为: DataReader 对象 DataSet 对象。

Page 24: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

24

第第 99 章 数据库编程章 数据库编程

9.3.1 DataReader 对象的属性和方法

属 性 说 明

FieldCount 获取当前行中的列 (字段 )数

IsClosed 获取 DataReader对象的状态,返回 True表示关闭

Item({name,col}) 获取或设置表字段值, name为字段名; col为列序号,序号从 0开始。例如: objReader.Item(0), objReader.Item(“name”)

ReacordsAffected 获取在执行 Insert, Update或 Delete命令后受影响的行数。该属性只有在读取完所有行且 DataReader对象关闭后才会被指定

表 9.6 DataReader 对象的常用属性

Page 25: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

25

第第 99 章 数据库编程章 数据库编程

方 法 说 明Close( ) 关闭 DataReader对象GetBoolean(Col) 获取序号为 Col的列的值,所获取列的数据类型必须为 Boolean

类型;其他类似的方法还有 GetByte,GetChar, GetDateTime, GetDecimal, GetDouble, GetString等

GetDataTypeName(Col)

获取序号为 Col的列的数据源数据类型名称

GetFieldType(Col) 获取序号为 Col的列数据类型GetName(Col) 获取序号为 Col的列的字段名GetOrdinal(Name) 获取字段名为 Name的列的序号GetValues(Col) 获取序号为 Col的列的值GetValues(values) 获取所有字段的值,并把字段值存放在 values数组中IsDBNull(Col) 判断序号为 Col的列是否为空值,是则返回 True,否则返回 Fal

se

Read( ) 读取下一条记录,返回布尔值 True表示有下一条记录, False表示下一条记录为空表 9.7 DataReader 对象的常用方法

Page 26: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

26

第第 99 章 数据库编程章 数据库编程

9.3.2 使用 DataReader 对象访问数据

DataReader 对象的创建方法:1) 建立数据库链接,可以选 SQLConnection 或者 O

LedbConnection 。2) 使用 Connection 对象的 open 方法打开数据库链

接。3) 将查询保存在 SQLCommand 或者 OledbComma

nd 对象中。4) 调用 Command 对象的 ExecuteReader 方法,将

数据读入 DataReader 对象中。5) 调用 DataReader 的 Read 或者Get 方法读取一批

数据,以便显示。6) 调用 Connection 对象的 Close 方法,关闭数据序链接。

Page 27: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

27

第第 99 章 数据库编程章 数据库编程

[例 9.3] 在 VS.NET 2003 环境下创建一个名为 UseDataReader 的 C#项目。其中,从 NorthWind 数据库的 Employees表中使用 SqlDataReader读取 LastName,FirstName 和 City三个字段,并添加一个 Label标签来显示数据。

Page 28: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

28

第第 99 章 数据库编程章 数据库编程

图 9.1 SqlDataReader 使用举例页面设计图

图 9.2 SqlDataReader 使用举例运行结果

Page 29: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

29

第第 99 章 数据库编程章 数据库编程

注意:每次使用完 DataReader 都应调用 Close( ) 方法关闭它。因为,当正在使用 DataReader时,它将独占与之关联的 Connection ,而且除了关闭 DataReader 以外不能对 Connection 执行其他任何操作 ( 包括创建另一个 DataReader 对象 ) 。

Page 30: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

30

第第 99 章 数据库编程章 数据库编程

9.4 ADO.NET 数据集

基于连接的方式操作数据的方法,其缺点是只能逐行顺序且以只读方式访问数据,因此,在任意访问某行数据或修改数据的情况下,使用 DataReader 就有些不够方便。本节将介绍通过编写代码操作数据库的另一种方式,即在无连接状态 ( 或离线状态 ) 下进行数据操作。

Page 31: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

31

第第 99 章 数据库编程章 数据库编程

9.4.1 DataSet 对象模型 DataSet 是 ADO.NET离线体系的核心 DataSet 中的数据完全采用 XML 格式 DataSet 的存在是 ADO.NET与以前数

据结构之间的最大区别,它作为一个实体而单独存在,可以认为是内存中的数据库,但是,就其本身而言,它对涉及到的数据源或者目标是透明的

Page 32: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

32

第第 99 章 数据库编程章 数据库编程

ExtendedProperties

DataColumnCollection

DataRowCollection

DataColumn

DataRow

DataTable

ChildRelations

ParentRelations

Constraints

ExtendedProperties

DataView

PrimaryKey

DataSet

DataRelationCollection

DataTableCollection

ExtendedProperties

图 9.3 DataSet 对象模型

Page 33: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

33

第第 99 章 数据库编程章 数据库编程

DataAdapter 对象是 DataSet 对象和数据库之间的桥梁,它可以用来传递各种 SQL 命令,并把命令的执行结果填入 DataSet 对象。同样,DataAdapter 对象还可将 DataSet 对象更新过的数据写回数据库。

9.4.2 DataAdapter 对象

Page 34: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

34

第第 99 章 数据库编程章 数据库编程

1 、 DataAdapter 对象的常用属性、方法和事件

属 性 说 明

ContinueUpdateOnError 获取或设置当执行 Update()方法更新数据源发生错误时是否继续。默认为 False

DeleteCommand 获取或设置删除数据源中的数据行的 SQL命令。该值为 Command对象

InsertCommand 获取或设置向数据源中插入数据行的 SQL命令。该值为 Command对象

SelectCommand 获取或设置查询数据源的 SQL命令。该值为 Command对象

UpdateCommand 获取或设置更新数据源中的数据行的 SQL命令。该值为 Command对象

表 9.8 DataAdapter 对象的常用属性

Page 35: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

35

第第 99 章 数据库编程章 数据库编程

1 、 DataAdapter 对象的常用属性、方法和事件

方 法 说 明Fill(dataset,srcTable) 将数据集的 SelectCommand属性指定的 SQL命令执行

后所选取的数据行置入参数 dataset指定的 DataSet对象

Update(dataset,srcTable)

调用 InsertCommand或 UpdateCommand或 DeleteCommand属性指定的 SQL命令,将 DataSet对象更新到相应的数据源。参数 dataset指定要更新到的数据源的 DataSet对象, srcTable参数为数据表对应的来源数据表名。该方法的返回值为影响的行数

表 9.9 DataAdapter 对象的常用方法

Page 36: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

36

第第 99 章 数据库编程章 数据库编程

1 、 DataAdapter 对象的常用属性、方法和事件

事 件 说 明

FillError(FillErrorEventArgs) 调用 DataAdapter的 Fill( )方法时若发生错误,则触发该事件

RowUpdated 当调用 Update( )方法并执行完 SQL命令时会触发该事件

RowUpdating 当调用 Update( )方法并在开始执行 SQL命令时会触发该事件

Page 37: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

37

第第 99 章 数据库编程章 数据库编程

1) 不带任何参数。 语法格式: SqlDataAdapter 对象名 = new SqlDataAda

pter( ) 2) 带一个参数,且该参数为已经定义好的 Comm

and 对象。语法格式:SqlDataAdapter 对象名 = new SqlDataAdapter(SqlCommand 对象 )

2 、定义 DataAdapter 对象的语法格式

Page 38: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

38

第第 99 章 数据库编程章 数据库编程

3) 带有两个参数,分别为 SQL 命令语句和 Connection 对象。语法格式:

SqlDataAdapter 对象名 = new SqlDataAdapter(SQL 语句, SqlConnection 对象 )

4) 带有两个参数,分别为SQL命令语句和连接字符串。语法格式:

SqlDataAdapter 对象名 = new SqlDataAdapter(SQL 语句,连接字符串 )

这种格式不需要先建立 Connection 对象和 Command 对象。

Page 39: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

39

第第 99 章 数据库编程章 数据库编程

以上是创建 SqlDataAdapter 对象的几种方法,读者可以选择使用。如果要创建OleDbDataAdapter 对象,将所有的“ Sql”改为“ OleDb”即可。

Page 40: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

40

第第 99 章 数据库编程章 数据库编程

9.4.3 DataSet 对象

DataSet 可以理解为一个容器,可以把从数据库中取得的数据保存在应用程序中,像是应用程序的微型数据库。

从 DataSet 对象模型可知, DataSet 对象结构非常复杂,在 DataSet 对象的下一层中是 DataTableCollection 对象、DataRelationCollection 对象和 ExtendedProperties 对象。

Page 41: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

41

第第 99 章 数据库编程章 数据库编程

1 、 DataTableCollection 每一个 DataSet 对象是若干个 DataTable 对

象组成, DataTableCollection 就是管理 DataSet 中的所有 DataTable 对象。

表示 DataSet 中两个 DataTable 对象之间的父 / 子关系是 DataRelation 对象。

Page 42: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

42

第第 99 章 数据库编程章 数据库编程

DataRelationCollection 对象就是管理 DataSet 中所有 DataTable 之间的 DataRelation关系的。它使一个 DataTable 中的行与另一个DataTable 中的行相关联。

2 DataRelationCollection

Page 43: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

43

第第 99 章 数据库编程章 数据库编程

3 ExtendedProperties

1) DataSet 对象定义。语法格式:

DataSet 对象名 = new DataSet ( )创建 DataSet 对象之后,必须用 DataAdapter

对象的 Fill(DataSet 对象 ,SrcTable) 方法将数据表记录填入 DataSet 对象。给出的 Fill( )方法中的 SrcTable 参数所指定的表名,不是数据库中的表名称,而是 DataSet 对象中的表名。

Page 44: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

44

第第 99 章 数据库编程章 数据库编程

DataSet 对象的属性和方法 属 性 说 明

CaseSensitive 获取或设置在 DataTable对象中字符串比较时是否区分字母的大小写。默认为 False

DataSetName 获取或设置 DataSet对象的名称

EnforceConstraints 获取或设置执行数据更新操作时是否遵循约束。默认为 True

HasErrors DataSet对象内的数据表是否存在错误行

Tables 获取数据集的数据表集合 (DataTableCollection), DataSet对象的所有 DataTable对象都属于 DataTableCollection

表 9.11 DataSet 对象的常用属性

Page 45: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

45

第第 99 章 数据库编程章 数据库编程

DataSet 对象的属性和方法 方 法 说 明

Clear( ) 删除所有 DataTable对象,清除 DataSet对象的数据

Clone( ) 复制 DataSet的结构,包括所有 DataTable架构、关系和约束。不复制任何数据

Copy( ) 复制 DataSet对象的结构和数据

表 9.12 DataSet 对象的常用方法

Page 46: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

46

第第 99 章 数据库编程章 数据库编程

2) DataTableCollection( 数据表集合 ) 和 DataTable 对象集合。 DataTableCollection 的常用属性主要有:(1) Count :获取 DataTableCollection 中的

DataTable(DataSet 对象所包含的 )个数(2) Item({index, name}) :获取 DataTableCollecti

on 中下标为 index或名称为 name 的数据表。

Page 47: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

47

第第 99 章 数据库编程章 数据库编程

创建 DataTable 对象的语法格式有下列两种: 1) DataTable 对象名 =new DataTable( ) 2) DataTable 对象名 =new DataTable(“ 数 据表名” )

使用第一种方式创建 DataTable 对象,需要在对象创建后使用 TableName 属性设置表名。

Page 48: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

48

第第 99 章 数据库编程章 数据库编程

DataTable 对象的属性、方法及事件

属 性 说 明

Columns 获取数据表的所有字段,即 DataColumnCollection集合

DataSet 获取 DataTable对象所属的 DataSet对象

DefaultView 获取与数据表相关的 DataView对象。 DataView对象可用来显示 DataTable对象的部分数据。可通过对数据表选择、排序等操作获得 DataView(相当于数据库中的视图 )

PrimaryKey 获取或设置数据表的主键

Rows 获取数据表的所有行,即 DataRowCollection集合

TableName 获取或设置数据表名

表 9.13 DataTable 对象的常用属性

Page 49: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

49

第第 99 章 数据库编程章 数据库编程

DataTable 对象的属性、方法及事件

表 9.14 DataTable 对象的常用方法

方 法 说 明Clear( ) 清除表中所有的数据Clone( ) 复制 DataTable对象的结构,包括所有 DataTable架构和

约束,而不复制数据Copy( ) 复制 DataTable对象的结构和数据,返回与本 DataTable

对象具有同样结构和数据的 Data Table对象NewRow( ) 创建一个与当前数据表有相同字段结构的数据行GetErrors( ) 获取包含错误的 DataRow对象数组

Page 50: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

50

第第 99 章 数据库编程章 数据库编程

DataTable 对象的属性、方法及事件

事 件 说 明

ColumnChanged 当数据行中某字段值发生变化时将触发该事件。其参数为 DataColumnChangeEventArgs,可以取的值为: Column(值被改变的字段 ); Row(字段值被改变的数据行 )

RowChanged 当数据行更新成功时将触发该事件。其参数为 DataRowchangeEventArgs ,可以取的值为:

Action (对数据行进行的更新操作名,包括: Add—将行加入数据表; Change—修改数据行内容; Commit—数据行的修改已提交; Delete—数据行一被删除; RollBack—数据行的更改被取消 ); Row(发生更新操作的数据行 )

RowDeleted 数据行被成功删除后将触发该事件。其参数为 DataRowDeleteEventArgs,可以取的值与 RowChanged事件的 DataRowchangeEventArgs参数相同

表 9.15 DataTable 对象的事件

Page 51: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

51

第第 99 章 数据库编程章 数据库编程

3) DataTable 应用举例

[例 9.5] 通过 DataAdapter将 Northwind 数据库中的 Employees表的数据填充到 DataTable ,最终显示在页面上。在 VS.NET 2003 环境下创建一个名为 UseDataTable 的 C# 项目,在前台页面上添加一个 DataGrid 控件 myDG。

Page 52: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

52

第第 99 章 数据库编程章 数据库编程

9.4.4 通过 DataAdapter 对象更新数据库

[例 9.6] 使用 System.Data.SqlClien 命名空间中的 SqlCommandBuider 类将 DataSet的变化与 SQL Server 数据库联系起来,当 DataSet被改动后, SqlCommandBuiler会自动生成更新用的 SQL 语句。在 VS.NET 2003环境下创建一个名为 UseDataReader 的 C#项目,在前台页面上添加一个 Label 控件 lbl 。

Page 53: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

53

第第 99 章 数据库编程章 数据库编程

9.4.5 执行存储过程

[例 9.7] 给出员工编号及其新的电话号码,并更新其家庭电话号码。为了明显起见,添加一个 DataGrid 控件来显示结果的变化。

Page 54: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

54

第第 99 章 数据库编程章 数据库编程

9.5 数据显示

Response.Write() 方法 ASP.NET提供了 3个可以方便地显示数

据的 Web 控件,它们是 Repeater DataList DataGrid

Page 55: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

55

第第 99 章 数据库编程章 数据库编程

9.5.1 Repeater 控件 Repeater 是简单的数据绑定列表控件 该控件支持

ItemTemplate( 数据模板 ) AlternatingItemTemplate(交替数据模板 ) HeaderTemplate(标题模板 ) FooterTemplate(页脚模板 ) SeparatorTemplate( 分隔模板 )

通过这些模板它可以控制数据的输出格式。

Page 56: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

56

第第 99 章 数据库编程章 数据库编程

模 板 说 明ItemTemplate 为数据源中的每一行呈现一次的元素。若要在 ItemTemplate中显

示数据,请向该模板添加一个或多个Web服务器或 HTML服务器控件,并将这些控件绑定到数据源。该模板是必需的

AlternatingItemTemplate

与 ItemTemplate元素类似,但对于 Repeater控件中的行每隔一行呈现一次。可以通过设置 AlternatingItemTemplate元素的样式属性来为它指定不同的外观。如果不定义该模板,就使用ItemTemplate

HeaderTemplate和 FooterTemplate

在呈现所有数据绑定行之前和之后呈现一次的元素。例如,可以通过将开始标记 <TABLE>放在 HeaderTemplate中并将结束标记 </TABLE>放在 Footer Template中而使 HTML表跨整个重复器。如果不定义,就不显示表头或页脚

SeparatorTemplate 在每行之间呈现的元素,例如分行符 (<BR>标记 )、行 (<HR>标记 )或逗号

表 9.16 Repeater 控件模板

Page 57: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

57

第第 99 章 数据库编程章 数据库编程

[例 9.8] Repeater 控件的应用。第一步骤是决定我们将要使用的数据源和字段。本例中将要使用 SQL Server Northwind 数据库中的 Categories列表。 Web页面将显示所有商品类型及其描述, HTML将使用 DIV标记,用 Repeater 模板来分隔内容。

Page 58: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

58

第第 99 章 数据库编程章 数据库编程

9.5.2 DataList 控件 Repeater 控件的增强版 支持的模板有:

ItemTemplate AlternatingItemTemplate HeaderTemplate FooterTemplate SeparatorTemplate SelectItemTemplate(选择模板 ) EditItem Template( 编辑模板 ) 。

Page 59: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

59

第第 99 章 数据库编程章 数据库编程

模 板 说 明

SelectItemTemplate 如果定义该模板,就提供当前在 DataList中选定的项的内容和布局,否则使用 ItemTemplate

EditItemTemplate 如果定义该模板,就提供当前在 DataList中编辑的项的内容和布局,否则使用 ItemTemplate

表 9.17 DataList 控件模板

Page 60: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

60

第第 99 章 数据库编程章 数据库编程DataList 控件的常见属性、方法和事件 类型 名 称 说 明

属性

AlternatingItemStyle 获取 DataList控件中交替项的样式熟悉

DataKeyField 获取或设置由 DataSource属性指定的数据源中的键字段DataSource 获取或设置用于填充控件中项的源数据

EditItemIndex获取或设置 DataList控件中要编辑的选定项的索引号的项数

EditItemStyle 获取 DataList控件中为进行编辑而选定的项的样式属性FooterStyle 获取 DataList控件的脚注部分的样式属性HeaderStyle 获取 DataList控件的标题部分的样式属性ItemSyle 获取 DataList控件中项的样式属性RepeatColumns 获取或设置要在 DataList控件中显示的列数RepeatDirection 获取或设置 DataList控件是垂直显示还是水平显示RepeatLayout 获取或设置控件在表中显示还是在流布局中显示SelectIndex 获取或设置 DataList控件中选定项的索引SelectItemStyle 获取 DataList控件中选定项的样式属性SeparatorStyle 获取 DataList控件中各项间分隔符的样式属性

表 9.18 DataList 控件的常见属性、方法和事件

Page 61: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

61

第第 99 章 数据库编程章 数据库编程

方法DataBind

将控件及其所有子控件绑定到 DataSource指定的数据源

FindControl 在当前的命名容器中搜索指定的服务器控件

事件

CancelCommand 对 DataList控件中的某个项单击 Cancel按钮时发生DeleteCommand 对 DataList控件中的某个项单击 Delete按钮时发生EditCommand 对 DataList控件中的某个项单击 Edit按按钮发生ItemCommand 当单击 DataList控件中的任一按钮时发生ItemCreated 当在 DataList控件中创建项时在服务器上发生ItemDataBound 当项被数据绑定到 DataList控件时发生SelectedIndexCh

anged在两次服务器发送之间,在数据列表控件中选择了

不同的项时发生UpdateCommand 对 DataList控件中的某个项单击 Update按按钮发生

ShowFooter获取或设置一个指示是否在 DataList控件中显示脚注部分的

ShowHeader获取或设置一个指示是否在 DataList控件中显示标题部分的

表 9.18 DataList 控件的常见属性、方法和事件(续)

Page 62: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

62

第第 99 章 数据库编程章 数据库编程

还有一些其他属性可以导致数据列表的显示有较大的改变,下面择重说明。

RepeatLayout :显示布局格式,指定是否以表格形式显示内容。

RepeatLayout.Table :指定布局以表格形式显示。 RepeatLayout.Flow :指定布局以流格形式显示,即

不加边框。 RepeatDirection :显示方向,指定显示是横向显示还是纵向显示。

RepeatDirection.Horizontal :指定是横向显示。 RepeatDirection.Vertical :指定是纵向显示 。 RepeatColumns :一行显示列数

Page 63: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

63

第第 99 章 数据库编程章 数据库编程

例如:有 10个数据需要显示, RepeatColumns 设定为 4 ,即一行显示 4列时。当 RepeatDirection=RepeatDirection.Horizontal横向显示时,显示布局如下: Item1 Item2 Item3 Item4 Item5 Item6 Item7 Item8 Item9 Item10 当 RepeatDirection=RepeatDirection.Vertical纵向显示时,显示布局如下: Item1 Item4 Item7 Item10 Item2 Item5 Item8 Item3 Item6 Item9

Page 64: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

64

第第 99 章 数据库编程章 数据库编程

[例 9.9] 在 VS.NET 环境下创建一个名为UseDataList 的 C# 项目,并且在页面上添加一个 DataList 控件 DataList1 , 3个 Label 控件,两个 DropDownList 控件 DropDown1 、 DropDown2 和 DropDown3 ,一个 CheckBox控件和 1个 LinkButton控件 Button1 。

Page 65: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

65

第第 99 章 数据库编程章 数据库编程

9.5.3 DataGrid 控件

DataGrid Web服务器控件以表格形式布局显示数据。

在默认情况下, DataGrid 以只读模式显示数据,但是 DataGrid 也能够在运行时自动在可编辑控件中显示数据。

DataGrid支持分页功能

Page 66: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

66

第第 99 章 数据库编程章 数据库编程

1 、 DataGrid 控件的功能

1) 将数据绑定到控件 DataSource 属性 典型数据源为 DataSet 和数据读取器 可绑定到代码中的数据源,如数据读取器或

数组。 控件可以将任何支持 IEnumerable 接口的

类用作数据源。

Page 67: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

67

第第 99 章 数据库编程章 数据库编程

2) 格式化项 “ 属性生成器”对话框的“格式”选项卡控制 DataGrid 的行的布局。

实际控件、文本和行的数据内容在“属性生成器”的“列”选项卡中指定。

可以配置以下选项 :页眉 、页脚 、页导航 、项 、普通项 、交替项 、选定项 、编辑模式项 、列 。

Page 68: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

68

第第 99 章 数据库编程章 数据库编程

3) 列 。 DataGrid 控件允许以各种方式指定它显示的列。 列的类型 说 明

绑定列 指定要显示的数据源字段。允许使用 .NET 格式设置表达式指定该字段的格式

超级链接列 将信息显示为超级链接。典型的用法是将数据 (例如客户编号和产品名 )显示为超级链接,用户可以单击它以定位到提供关于该项的详细信息的单独页

按钮列 允许为网格中的每个项添加一个按钮,并为该按钮定义自定义功能。“ ”例如,可以创建一个标记为 添加到购物车 的按钮,当用户单

“ ” “ ” “击它时运行自定义逻辑。也可添加实现 选择 、 编辑 、 更” “ ” “ ”新 、 取消 和 删除 功能的预定义按钮

“ ” “ ”编辑 列、 更新“ ”列、 取消 列

创建即时编辑

模板列 创建 HTML文本和服务器控件的组合,以便为列设计自定义布局。模板列中的控件可以绑定有数据。模板列为定义网格内容的布局和功能提供了更大的灵活性,因为可以完全控制数据的显示方式以及当用户与网格中的行交互时发生的操作

Page 69: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

69

第第 99 章 数据库编程章 数据库编程

4) 事件 ItemCreated事件 EditCommand DeleteCommand UpdateCommand CancelCommand

Page 70: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

70

第第 99 章 数据库编程章 数据库编程

5) 编辑项 允许即时编辑 使用模板列创建自定义编辑布局

Page 71: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

71

第第 99 章 数据库编程章 数据库编程

6) 排序 默认排序:指定希望网格支持排序。 自定义排序: 定义支持排序的列 。

Page 72: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

72

第第 99 章 数据库编程章 数据库编程

默认排序

设置步骤如下: 在“设计”视图中,右键单击 DataGrid 控件,在菜单中选择“属性生成器” ( 如图 9.15所示 ) 。

在对话框中,单击“常规”选项卡;选中“允许排序”复选框 ( 如图 9.16所示 ) 。

Page 73: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

73

第第 99 章 数据库编程章 数据库编程

图 9.15 选择“属性生成器”

Page 74: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

74

第第 99 章 数据库编程章 数据库编程

图 9.16 选择“允许排序”

Page 75: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

75

第第 99 章 数据库编程章 数据库编程

自定义排序 操作步骤如下:

在“设计”视图中,右键单击 DataGrid 控件,在菜单中选择“属性生成器” ( 如图 9.15所示 ) 。

在对话框中,单击“常规”选项卡;选中网格的“允许排序”复选框 ( 如图 9.16所示 ) 。

切换到“列”选项卡 ( 如图 9.17 所示 ) 。 向 DataGrid 控件中添加列和模板列的任意组合。若要启用列的排序,还要为该列的“排序表达式”输入值。通常是该列要绑定到的数据字段的名字。

为 SortCommand事件添加事件处理程序。

Page 76: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

76

第第 99 章 数据库编程章 数据库编程

图 9.17 “ 列”选项卡

Page 77: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

77

第第 99 章 数据库编程章 数据库编程

2 DataGrid 控件的常见属性、方法和事件 类型 名 称 说 明

属性

AllowCustomPaging 获取或设置指示是否启用自定义分页的值AllowPaging 获取或设置指示是否启用分页的值AllowSorting 获取或设置指示是否启用排序的值AlternatingItemStyle 获取 DataGrid控件中交替项的样式属性

AutoGenerateColumns获取或设置一个值,该值指示是否为数据源中的每一字段

自动创建 BoundColumn对象并在 DataGrid控件中显示这些对象

Columns 获取表示 DataGrid控件的各列的对象的集合CurrentPageIndex 获取或设置当前显示页的索引EditItemIndex 获取或设置 DataGrid控件中要编辑的项的索引EditItemStyle 获取在 DataGrid控件中选定来进行编辑的项的样式属性

Items获取表示 DataGrid控件中单独项的 DataGridItem对象的

集合PageCount 获取显示 DataGrid控件中各项所需的总页数

表 9.19 DataGrid 控件的常见属性、方法和事件

Page 78: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

78

第第 99 章 数据库编程章 数据库编程

方法 DataBind将控件及其所有子控件绑定到 DataSource属性指定的数

据源

事件

CancelCommand 对 DataGrid控件中的某个项单击 Cancel按钮时发生

DeleteCommand 对 DataGrid控件中的某个项单击 Delete按钮时发生

EditCommand 对 DataGrid控件中的某个项单击 Edit按钮时发生

PageIndexChanged

当单击页选择元素之一时发生。

UpdateCommand 对 DataGrid控件中的某个项单击 Update按钮时发生。

ItemCommand 当单击 DataGrid控件中的任一按钮时发生。

表 9.19 DataGrid 控件的常见属性、方法和事件(续)

PagerStyle 获取 DataGrid控件的分页节的样式属性

PageSize 获取或设置要在 DataGrid控件的单页上显示的项数

SelectedIndex 获取或设置 DataGrid控件中选定项的索引

SelectedItem 获取表示 DataGrid 控件中选定项的 DataGridItem对象

VirtualItemCount获取或设置在使用自定义分页时 DataGrid控件中的实际

项数

Page 79: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

79

第第 99 章 数据库编程章 数据库编程

3 DataGrid 控件应用举例

[例 9.10] 创建 GataGrid 控件的常见功能,如分页、排序、编辑项等。

Page 80: ASP.NET 程序设计教程 闫宏亮  潘勇  主编

80

第第 99 章 数据库编程章 数据库编程

9.5.4 三种控件的比较 功能 Repeater DataList DataGrid

模板支持 Yes(必须 ) Yes(必须 ) 在列中应用 (可选 )

表格外观 No No Yes

流式布局 Yes Yes No

列表/报纸样式布局 No Yes No

样式和外观属性 No Yes Yes

项目选择 No Yes Yes

项目编辑 No Yes Yes

删除 No Yes Yes

分页 No No Yes

排序 No No Yes

表 9.19 Repeater 、 DataList 和 DataGrid 控件的功能对比