第 6 章 ADO.NET 数据访问接口

48
第 6 第 ADO.NET 第第第第第第

description

第 6 章 ADO.NET 数据访问接口. 6. 内容提要. 本章首先介绍 ADO.NET 的结构。 然后将对 ADO.NET 的 Connection 对象, Command 对象、 DataReader 和 DataAdapter 对象作深入的研究。 作为数据库的基础,将对 SQL 语句作简要的介绍,介绍基本查询语句、聚合函数、分组查询以及交叉查询。 最后介绍常用的数据控件: Repeater 数据控件、 DataList 数据控件和 DataGrid 数据控件。. ADO.NET 的结构. 数据提供程序. 表 6-1 .NET 数据提供程序的四个核心对象. - PowerPoint PPT Presentation

Transcript of 第 6 章 ADO.NET 数据访问接口

Page 1: 第 6 章  ADO.NET 数据访问接口

第 6 章 ADO.NET 数据访问接口

Page 2: 第 6 章  ADO.NET 数据访问接口

内容提要 本章首先介绍 ADO.NET 的结构。 然 后 将 对 ADO.NET 的 Connection 对

象 , Command 对 象 、 DataReader 和DataAdapter 对象作深入的研究。

作为数据库的基础,将对 SQL 语句作简要的介绍,介绍基本查询语句、聚合函数、分组查询以及交叉查询。

最后介绍常用的数据控件: Repeater 数据控件、DataList 数据控件和 DataGrid 数据控件。

Page 3: 第 6 章  ADO.NET 数据访问接口

ADO.NET 的结构

Page 4: 第 6 章  ADO.NET 数据访问接口

数据提供程序 表 6-1 .NET 数据提供程序的四个核心对象

对象 说明

Connection 建立与特定数据源的连接。

Command 对数据源执行命令。

DataReader 从数据源中读取只进且只读的数据流。

DataAdapter 用于将数据填充到 DataSet。

Page 5: 第 6 章  ADO.NET 数据访问接口

SQL Server .NET 数据提供程序 对应 SQL Server.NET 的 4 个核心对象分别是:

SqlConnection 、 SqlCommand 、 SqlDataReader 和 SqlDataAdapter 。这 4 个对象包含在 System.Data.SqlClient 命名控件中,需要将这个命名空间引入到文件中。

SQL Server.NET 数据提供程序对 SQL Server数据库的底层操作进行了封装,可以更加快捷的访问 SQL Server 数据库。目前主要用来操作SQL Server 2000 或者 SQL Server2005 。

Page 6: 第 6 章  ADO.NET 数据访问接口

OLE DB .NET 数据提供程序 对应 OLE DB .NET 的 4 个核心对象分别是:

OleDbConnection 、 OleDbCommand 、OleDbDataReader 和 OleDbDataAdapter 。这 4 个对象包含在 System.Data.OleDb 命名控件中,需要将这个命名空间引入到文件中

。 目前主要用来访问 Access 、 Foxpro 等简单

的数据源。

Page 7: 第 6 章  ADO.NET 数据访问接口

Oracle DB .NET 数据提供程序 对应 Oracle DB .NET 的 4 个核心对象分别是:

OracleConnection 、 OracleCommand 、 OracleDataReader 和 OracleDataAdapter 。这 4 个对象包含在 System.Data.OracleClient命名控件中,需要将这个命名空间引入到文件中。

目前 ADO.NET1.1 带 Oracle DB.NET 数据提供程序只支持 Oracle8.1.7 以上版本,对于其他的 Oracle 版本还需要到 Microsoft 网站下载驱动程序。

Page 8: 第 6 章  ADO.NET 数据访问接口

ODBC.NET 数据提供程序 对应 ODBC .NET 的 4 个核心对象分别是:

OdbcConnection 、 OdbcCommand 、 OdbcDataReader 和 OdbcDataAdapter 。这4 个对象包含在 System.Data.Odbc 命名控件中,需要将这个命名空间引入到文件中。

通过 ODBC 建立的数据源都可以通过ODBC.NET 数据提供程序访问。

Page 9: 第 6 章  ADO.NET 数据访问接口

DataSet 简介 ADO.NET 的核心组件是 DataSet ,内部用

XML 描述数据,具有平台无关性。 DataSet中常用的对象是 DataTable 和 DataRow 等等。

DataSet 通过 DataAdapter 对象从数据源得到数据, DataAdapter 是连接 DataSet 和数据库的一个桥梁,因此命名为:“数据适配器”。

Page 10: 第 6 章  ADO.NET 数据访问接口

SQL 语言概述 SQL ( Structured Query Language )是关系型数

据库的标准语言,是由国际标准组织提出的,各种关系型数据库都支持 SQL 指令, SQL Server 在基本的SQL 基础上进行了扩充, SQL 语句有如下的两大特点:

( 1 ) SQL 是一种类似于英语的语言,很容易理解和书写。 ( 2 ) SQL 语言是非过程化的语言(第四代语言)。 SQL

语言包括 DDL ( Data Definition Language :数据定义语言), DML ( Data Manipulation Language :数据操作语言)和 DCL ( Data Control Language :数据控制语言)等等。

Page 11: 第 6 章  ADO.NET 数据访问接口

表 6-2 SQL 语句分类 SQL分类 描述

数据定义语言( DDL)

数据定义语言( DDL)用于定义、修改或者删除数据库对象,如 Create Table等

数据操纵语言( DQL)

数据查询语句( Data Query Language , DQL)用于对数据进行检索。如最常用的 Select语句

数据操纵语言( DML)

数据操纵语言( DML)用于访问、建立或者操纵在数据库中已经存在数据,如 Select 、 Insert 、 Update和 Delete等等。

事务控制语言( TCL)

事务控制语言( Transact Control Language)管理 DML语句所做的修改,是否保存修改或者放弃修改。如:Commit 、 Rollback 、 Savepoint 、 Set Transaction等命令。

数据控制语言( DCL)

数据控制语言( DCL)管理对数据库内对象的访问权限和授予和回收,如 Grant 、 Revoke等等。

Page 12: 第 6 章  ADO.NET 数据访问接口

基本 SQL 语句 基本的 SQL 语句包括 DQL 和 DML 。也就是对数据库最常用的四大基

本操作:查询( Select )、插入( Insert )、更新( Update )和删除( Delete )。

1. 基本句型一:(最简单的 SELECT 语句) SELECT 字段名 FROM 数据表 例 1. SELECT * FROM grade 功能说明:将 grade 表中的所有字段取出来。 例 2. SELECT 学号 , 姓名 FROM grade 功能说明:将 grade 表中学号和姓名字段取出来。 例 3. SELECT 学号 , 姓名 , 语文 + 数学 + 英语 as 总成绩

FROM grade 功能说明:将 grade 表中的学号和姓名取出来,并将语文、

数学和英语成绩相加产生虚拟的总成绩。

Page 13: 第 6 章  ADO.NET 数据访问接口

基本句型二 2. 基本句型二:(使用条件查询)

SELECT 字段名 FROM 数据表 WHERE 筛选条件 测试句型如下。 例 1. SELECT * FROM grade WHERE 数学 >60 功能说明:把所有数学成绩大于 60 分的记录选出来。 例 2. SELECT * FROM grade WHERE 数学 =300 or 语文 =300 功能说明:把数学成绩等于 300 分或者语文成绩等于 300 分的人选出来。 例 3. Like 子句基本格式一:“ _” 匹配。 功能说明:每个下划线匹配一个任意字符,注意只匹配一个字符。比如:姓

名 like '_ 敏 ' ,匹配姓名以“敏”字结尾且字数等于二的所有数据记录,如:“张敏”。

例 4. Like 子句基本格式二:“ %” 匹配。 比如:姓名 Like '% 敏 %' ,匹配姓名中出现“敏”的所有数据记录,如:

“周惠敏”,“于敏”、“敏大”、“敏二”等。比如要在数据库中查询姓江的人,只要利用一条 SQL 语句就可以了, SELECT * FROM 数据库表 WHERE 姓名 Like ' 江 %' 。

Page 14: 第 6 章  ADO.NET 数据访问接口

基本句型三 3. 基本句型三:(进行排序)

SELECT 字段名 FROM 数据表 ORDER BY 字段名 测试句型如下。 ( 1 ) SELECT * FROM grade ORDER BY 数学 注:从低到

高排序 功能说明:从 grade 表中取出所有字段,并按数学成绩排序。 ( 2 ) SELECT * FROM grade ORDER BY 数学 , 语文 功能说明:从 grade 表中取出所有字段,并按数学成绩排序,如果

数学成绩相同则按照语文成绩排序。 ( 3 ) SELECT * FROM grade ORDER BY 数学 desc 注:从

高到低排序 功能说明:从 grade 表中取出所有字段,并按数学成绩倒序。 ( 4 ) SELECT top 5 * FROM grade 功能说明:从 grade 表中取出前五条记录的所有字段。

Page 15: 第 6 章  ADO.NET 数据访问接口

DML 的基本格式 DML 的基本格式

( 1 ) DELETE 指令:删除数据记录。 基本语法: DELETE FROM 数据表 WHERE 条件 例: DELETE from grade WHERE 数学 =0 功能说明:删除所有数学成绩为零的记录,如果没有 WHERE 子句,则删除所有

记录。 ( 2 ) UPDATE 指令:更新数据记录。 基本语法: UPDATE 数据表 SET 字段值 = 新值 WHERE 条件 例 1 : UPDATE grade SET 数学 = 数学 +10 说明:将 grade 表中所有人的

成绩加 10 分 例 2 : UPDATE grade SET 数学 =100 WHERE 姓名 like '% 敏 %' 功能说明:将姓名中含有敏的人的数学成绩更新为 100 分 ( 3 ) INSERT INTO 指令:添加数据记录。 基本格式 1 : INSERT INTO 数据表 VALUES (字段新值) 基本格式 2 : INSERT INTO 数据表(字段一,字段二,……) VALUES (字

段新值)

Page 16: 第 6 章  ADO.NET 数据访问接口

聚合函数 聚合函数在信息管理系统经常使用,功

能是做一些基本的统计和计算。

聚合函数有 5 个,分别是 SUM函数、 AVG函数、 COUNT函数、 MAX函数和 MIN函数。

Page 17: 第 6 章  ADO.NET 数据访问接口

SUN函数 ( 1 ) SUN函数,功能是算出某个字段的总值。

例 . SELECT SUM( 数学 ) As Total FROM grade 功能说明:求出所有学生数学成绩总和,这个数值的列名为 Total 。在 SQL输入窗口中输入,

( 2 ) AVG函数,功能是算出某个字段的平均值。 例 . SELECT AVG( 数学 ) As Average FROM grade

( 3 ) COUNT函数,功能是算出返回记录的行数。 例 . SELECT COUNT(*) As Counts FROM grade 功能说明:求出满足条件的记录总数。

Page 18: 第 6 章  ADO.NET 数据访问接口

( 4 ) MAX函数,功能是算出某个字段的最大值。 例 . SELECT MAX( 数学 ) As First FROM grade 功能说明:求出所有学生数学成绩的最高分,这个

数值的列名为 First 。

( 5 ) MIN函数,功能是算出某个字段的总值。 例 . SELECT MIN( 数学 ) As Last FROM grade 功能说明:求出所有学生数学成绩的最低分,这个

数值的列名为 Last 。

Page 19: 第 6 章  ADO.NET 数据访问接口

分组查询 计算所有男生的数学平均成绩,有两种方法: ( 1 ) SELECT 性别 , AVG( 数学 ) as 平均分 FROM grade GROUP BY 性别 HAVING 性别 =' 男 '

( 2 ) SELECT 性别 , AVG( 数学 ) as 平均分 FROM grade WHERE 性别 =' 男 ' GROUP BY 性别

Page 20: 第 6 章  ADO.NET 数据访问接口

分组查询 在使用分组查询的时候,有 4 点需要注意。

( 1 ) WHERE 子句必须放在 GROUP BY 子句之前。

( 2 ) HAVING 子句中只能包含分组字段或者聚合函数。

( 3 ) SELECT 语句选择的列只能是分组字段或者聚合函数。

( 4 ) HAVING必须放在 GROUP BY 子句之后。

Page 21: 第 6 章  ADO.NET 数据访问接口

交叉查询 考虑 3 个表:学生表( Student )、课程表( Course )

和选课表( SC )表的关系如图 7-16 所示。

其中: ( 1 )学生表中的 sno 表示学生学号, sname 表示学生姓名。 ( 2 )课程表中 cno 表示课程的编号, cname 表示课程的名称。

( 3 )选课表中的 sno 表示学生学号, cno 表示课程编号。

Page 22: 第 6 章  ADO.NET 数据访问接口

查找选择课程为“软件工程”的所有同学姓名?可以利用如下的 SQL 语句。

SELECT b.sname FROM sc a, student b, course c

WHERE a.cno=c.cno AND a.sno=b.sno and c.cname='软件工程‘

其中“ sc a” 表示给表 sc起个别名为 a,同样“ student b” 是给 student 表起个别名 b。该查询实现了三个表之间的交叉查询。

Page 23: 第 6 章  ADO.NET 数据访问接口

Connection 对象 案例名称:使用 Connection 对象程序名称: 6-01.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script language="C#" runat="server">void Page_Load(Object sender, EventArgs e) { OleDbConnection Conn=new OleDbConnection(); Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"); Conn.Open(); Message.Text=Conn.State.ToString(); Conn.Close();}</script><asp:Label id="Message" runat="server" />

Page 24: 第 6 章  ADO.NET 数据访问接口

使用 Connection 对象的构造函数

案例名称:使用 Connection 对象的构造函数程序名称: 6-02.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script language="C#" runat="server">void Page_Load(Object sender, EventArgs e) {

OleDbConnection Conn;Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+

"Data Source="+Server.MapPath("person.mdb")); Conn.Open();Message.Text=Conn.State.ToString();Conn.Close();

}</script><asp:Label id="Message" runat="server" />

Page 25: 第 6 章  ADO.NET 数据访问接口

使用 Connection 对象连接 SQL Server 数据库

案例名称:使用 Connection 对象连接 SQL Server 数据库程序名称: 6-03.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SqlClient" %><script runat="server">void Page_Load(Object sender, EventArgs e) {

SqlConnection Conn;Conn=new SqlConnection("server=localhost;database=pubs;uid=sa;pwd=''"); Conn.Open();Message.Text=Conn.State.ToString();Conn.Close();

}</script><asp:Label id="Message" runat="server" />

Page 26: 第 6 章  ADO.NET 数据访问接口

Command 对象 建立数据连接以后,利用 Command 对象来执行命令并从数据源返回结果。

Command 对象常用的构造函数包括两个参数, 1 个是要执行的 SQL 语句,另一个是已经建立的 Connnection 对象,基本语法是:

OleDbCommand Comm=new OleDbCommand("select * from grade",Conn);

Page 27: 第 6 章  ADO.NET 数据访问接口

ExecuteReader方法 案例名称:使用 ExecuteRader 方法程序名称: 6-04.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script runat="server">void Page_Load(Object sender, EventArgs e) { OleDbConnection Conn=new OleDbConnection(); Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"); Conn.Open(); OleDbCommand Comm=new OleDbCommand("select * from grade",Conn); OleDbDataReader dr=Comm.ExecuteReader(); dg.DataSource=dr; dg.DataBind(); Conn.Close();}</script><asp:DataGrid id="dg" runat="server" />

Page 28: 第 6 章  ADO.NET 数据访问接口

案例名称:使用 Like 子句实现模糊查询程序名称: 6-05.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script runat="server"> void submit_Click(Object sender,EventArgs e) { OleDbConnection Conn=new OleDbConnection(); Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"); Conn.Open(); string sql="select * from grade"; if (mytext.Text!="") sql="select * from grade where 姓名 like '%"+mytext.Text+"%'"; Message.Text=sql; OleDbCommand Comm=new OleDbCommand(sql,Conn); OleDbDataReader dr=Comm.ExecuteReader(); dg.DataSource=dr; dg.DataBind(); Conn.Close();}</script>请输入被查询的人名关键字 <br><form name="myform" runat="server"><asp:TextBox id="mytext" size="50" runat="server"/><br><asp:Button id="submit" onClick=submit_Click runat="server" Text=" 查询 "></asp:Button><br><asp:label id="Message" runat="server"/><br><asp:DataGrid id="dg" runat="server" /></form>

Page 29: 第 6 章  ADO.NET 数据访问接口

程序中最关键的是如何将变量加到 SQL 语句中去。“ SQL = ”Select * from grade where 姓名 like ‘%“ + str + ”%’“” 语句中 str 是变量,要得到正确的格式只要按照下面的两个步骤进行操作。

( 1 )写出正确的 SQL 语句, SQL =" Select * from grade where 姓名 like '% 敏 %'" ,因为姓名是文本型变量,所以必须加上单引号,在 SQL 语句中,用单引号表示字符型变量。

( 2 )确定要替换的变量,这里是要将“敏”替换成变量Key 。替换的规则是:删除“敏”字,在原字符串“敏”的位置,首先加上两个双引号,然后在两个双引号之间加上两个加号,最后将变量加到两个加号中间。

Page 30: 第 6 章  ADO.NET 数据访问接口

ExecuteScalar方法 案例名称:使用 ExecuteScalar 方法程序名称: 6-06.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script runat="server">void Page_Load(Object sender, EventArgs e) { OleDbConnection Conn=new OleDbConnection(); Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"); Conn.Open(); String strSQL="select avg( 数学 ) from grade"; OleDbCommand Comm=new OleDbCommand(strSQL,Conn); Double d=(Double)Comm.ExecuteScalar(); Message.Text=" 所有人数学的平均成绩为 "+d.ToString()+" 分 "; Conn.Close();}</script><asp:Label id="Message" runat="server" />

Page 31: 第 6 章  ADO.NET 数据访问接口

ExecuteNonQuery方法 案例名称:使用 ExecuteNonQuery 方法执行 Insert 语句程序名称: 6-07.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script runat="server">void Page_Load(Object sender, EventArgs e) { OleDbConnection Conn=new OleDbConnection(); Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"); Conn.Open(); String strSQL="insert into grade ( 学号 , 姓名 , 数学 ) "+ "values (99,'小张 ',100)"; OleDbCommand Comm=new OleDbCommand(strSQL,Conn); Comm.ExecuteNonQuery(); Conn.Close(); Response.Write(" 操作成功! ");}</script>

Page 32: 第 6 章  ADO.NET 数据访问接口

ADO.NET事务处理

案例名称:使用事务的基本格式程序名称: 6-08.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script runat="server">void Page_Load(Object sender, EventArgs e) { OleDbConnection Conn=new OleDbConnection(); Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"); Conn.Open(); OleDbCommand Comm = new OleDbCommand(); OleDbTransaction Trans; Trans = Conn.BeginTransaction(); Comm.Connection = Conn; Comm.Transaction = Trans; try { Comm.CommandText = "UPDATE grade SET 数学 =100 WHERE 姓名 LIKE '% 周 %'"; Comm.ExecuteNonQuery(); Comm.CommandText = "UPDATE grade SET 数学 =60 WHERE 姓名 LIKE '% 张 %'"; Comm.ExecuteNonQuery(); Trans.Commit(); Response.Write("事务执行成功! "); } catch(Exception ex) { Trans.Rollback(); Response.Write(" 出现错误,事务已经回滚! "); } finally { Conn.Close(); }}</script>

Page 33: 第 6 章  ADO.NET 数据访问接口

DataReader 对象 取 DataReader 对象的数据,有两种方

法: 1 、通过和 DataGrid 等数据控件绑定,直

接输出,使用方法如程序 6-4.aspx 。 2 、另一种方法是利用循环将其数据取出

Page 34: 第 6 章  ADO.NET 数据访问接口

案例名称:使用 DataReader 对象输出数据程序名称: 6-09.aspx <% @ Page Language="C#" %><%@Import Namespace="System.Data"%><%@Import Namespace="System.Data.OleDb"%><Script runat="server">void Page_Load(Object Src, EventArgs E) { OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb")); Conn.Open(); String strSQL="select * from grade"; OleDbCommand Comm=new OleDbCommand(strSQL,Conn); OleDbDataReader dr=Comm.ExecuteReader(); string html="<Table border=1>"; html+="<TR>"; html+="<TD><B> 学号 </B></TD>"; html+="<TD><B> 姓名 </B></TD>"; html+="<TD><B> 数学 </B></TD>"; html+="</TR>";try{//读出每一条记录 while(dr.Read()) { html+="<TR>"; html+="<TD>" + dr[" 学号 "].ToString() + "</TD>"; html+="<TD>" + dr[" 姓名 "].ToString() + "</TD>"; html+="<TD>" + dr[" 数学 "].ToString() + "</TD>"; html+="</TR>"; } html+="</Table>";}finally{// 关闭链接 dr.Close(); Conn.Close();} Response.Write(html);}</Script>

Page 35: 第 6 章  ADO.NET 数据访问接口

DataAdapter 对象 案例名称:使用 DataAdapter 对象构造方法执行程序名称: 6-10.aspx <% @ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.OleDb" %><script runat="server">protected void Page_Load(Object sender, EventArgs e) {

OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"));

string sql="select * from grade";Conn.Open();OleDbDataAdapter da = new OleDbDataAdapter(sql, Conn);//执行 SQL DataSet ds = new DataSet();da.Fill(ds, "grade");dg.DataSource=ds.Tables["grade"].DefaultView;dg.DataBind();

}</script><ASP:DataGrid id="dg" runat="server" />

Page 36: 第 6 章  ADO.NET 数据访问接口

使用 DataAdapter 对象的 SelectCommand 属性 案例名称:使用 DataAdapter 对象的 SelectCommand 属性程序名称: 6-11.aspx <% @ Page Language="C#" %><%@Import Namespace="System.Data"%><%@Import Namespace="System.Data.OleDb"%><Script language="C#" runat="server">void Page_Load(Object Src, EventArgs E) {

OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"));

string strSQL="select * from grade";OleDbCommand Comm=new OleDbCommand(strSQL,Conn);OleDbDataAdapter da=new OleDbDataAdapter();da.SelectCommand=Comm;Conn.Open();DataSet ds = new DataSet();da.Fill(ds,"grade");dg.DataSource=ds.Tables["grade"].DefaultView;dg.DataBind();Conn.Close();

}</script><ASP:DataGrid id="dg" runat="server"/>

Page 37: 第 6 章  ADO.NET 数据访问接口

案例名称:使用 DataAdapter 对象的 InsertCommand 属性程序名称: 6-12.aspx <%@ Page Language="C#" %><%@Import Namespace="System.Data"%><%@Import Namespace="System.Data.OleDb"%><Script runat="server">void Page_Load(Object Src, EventArgs E) { OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb")); string strInsertSQL = "INSERT INTO grade( 学号 , 姓名 , 数学 ) VALUES(111,'盖茨 ',59)"; string strSelectSQL = "SELECT * FROM grade WHERE 学号 =111"; string strUpdateSQL = "UPDATE grade SET 数学 =60 WHERE 学号 =111"; // 创建 Command 对象 OleDbCommand InsertComm = new OleDbCommand(strInsertSQL,Conn); OleDbCommand SelectComm = new OleDbCommand(strSelectSQL,Conn); OleDbCommand UpdateComm = new OleDbCommand(strUpdateSQL,Conn); // 创建 DataAdapter 对象 da OleDbDataAdapter da=new OleDbDataAdapter(); Conn.Open(); da.SelectCommand = SelectComm; da.UpdateCommand = UpdateComm; da.InsertCommand = InsertComm; // 创建并填充 DataSet DataSet ds = new DataSet(); da.Fill(ds,"grade1"); da.InsertCommand.ExecuteNonQuery(); da.Fill(ds,"grade2"); da.UpdateCommand.ExecuteNonQuery(); da.Fill(ds,"grade3"); // 将 DataSet绑定到 DataGrid 控件

dg1.DataSource=ds.Tables["grade1"].DefaultView;dg2.DataSource=ds.Tables["grade2"].DefaultView;dg3.DataSource=ds.Tables["grade3"].DefaultView;dg1.DataBind(); dg2.DataBind(); dg3.DataBind();

// 关闭连接 Conn.Close();}</script>DataGrid1:<ASP:DataGrid id="dg1" runat="server"/><BR>DataGrid2:<ASP:DataGrid id="dg2" runat="server"/><BR>DataGrid3:<ASP:DataGrid id="dg3" runat="server"/>

Page 38: 第 6 章  ADO.NET 数据访问接口

DataSet 对象 DataSet 封装在命名空

间“ Syste.Data” 中。 DataSet 中可以包含任意数量的 DataTable (数据表),且每个DataTable 对应一个数据库中的数据表和视图。

通过 DataAdapter 的 Fill方法,将表内容填充到 DataSet 对象中,而且可以填充多个表。利用别名来区分。比如“ da.Fill(ds,"grade1");”的功能是将 da 对象中的数据填充到 ds 对象中,并起别名“ grade1” ,程序 6-12.aspx 说明了Fill方法的使用。

Page 39: 第 6 章  ADO.NET 数据访问接口

案例名称:自动生成 DataSet 对象程序名称: 6-13.aspx <%@ Page Language="C#" %><%@ Import namespace="System.Data" %><script language="C#" runat="server">void Page_Load(Object sender, EventArgs e){

DataSet myds = new DataSet();DataTable mydt = new DataTable("Squares");DataRow mydr;mydt.Columns.Add(new DataColumn(" 数字 ",typeof(Int32)));mydt.Columns.Add(new DataColumn(" 平方 ",typeof(Int32)));for (int i = 0; i < 10; i++) {

mydr = mydt.NewRow();mydr[0] = i;mydr[1] = i * i;mydt.Rows.Add(mydr);

}myds.Tables.Add(mydt);dg.DataSource = myds.Tables["Squares"].DefaultView;dg.DataBind();}

</script><asp:DataGrid id="dg" runat= "server"/>

Page 40: 第 6 章  ADO.NET 数据访问接口

操作 DataSet 对象案例名称:操作 DataSet 对象程序名称: 6-14.aspx <%@ Page Language="C#" %><%@Import Namespace="System.Data"%><%@Import Namespace="System.Data.OleDb"%><Script runat="server">void Page_Load(Object Src, EventArgs E) {

OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"));

Conn.Open();string strSQL="select * from grade;";OleDbDataAdapter da=new OleDbDataAdapter(strSQL, Conn);DataSet ds = new DataSet();da.Fill(ds,"grade");DataTable dt = ds.Tables["grade"];DataRow row = dt.NewRow();row[" 学号 "] = "199";row[" 姓名 "] = "小布什 ";row[" 数学 "] = 58;dt.Rows.Add(row);OleDbCommandBuilder cb = new OleDbCommandBuilder(da);da.Update(ds,"grade");dg.DataSource = ds.Tables["grade"].DefaultView;dg.DataBind();Conn.Close();

}</script><ASP:DataGrid id="dg" runat="server"/>

Page 41: 第 6 章  ADO.NET 数据访问接口

DataView 对象 案例名称:使用 DataView 对象程序名称: 6-15.aspx <%@ Page Language="C#" %><%@Import Namespace="System.Data"%><%@Import Namespace="System.Data.OleDb"%><Script runat="server">void Page_Load(Object Src, EventArgs E) { OleDbConnection Conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb")); String strSQL = "select * from grade"; OleDbCommand Comm = new OleDbCommand(strSQL,Conn); OleDbDataAdapter da = new OleDbDataAdapter(); da.SelectCommand = Comm; Conn.Open(); DataSet ds = new DataSet(); da.Fill(ds,"grade"); DataView dv = new DataView(ds.Tables["grade"]); dv.RowFilter = " 数学 > 60"; dv.Sort = " 学号 desc, 数学 DESC"; Response.Write("满足条件的记录有: " + dv.Count + " 条 "); dg.DataSource = dv; dg.DataBind(); Conn.Close();}</script><ASP:DataGrid id="dg" runat="server"/>

Page 42: 第 6 章  ADO.NET 数据访问接口

使用 DataView 对象进行简单查询

案例名称:使用 DataView 对象进行简单查询程序名称: 6-16.aspx <%@ Page Language="C#" %><%@Import Namespace="System.Data"%><%@Import Namespace="System.Data.OleDb"%><Script runat="server">void Page_Load(Object Src, EventArgs E) {

OleDbConnection Conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source="+Server.MapPath("person.mdb"));

String strSQL = "select * from grade";OleDbCommand Comm = new OleDbCommand(strSQL,Conn);OleDbDataAdapter da = new OleDbDataAdapter();da.SelectCommand = Comm;Conn.Open();DataSet ds = new DataSet();da.Fill(ds,"grade");DataView dv = new DataView(ds.Tables["grade"],"", " 姓名 ",

DataViewRowState.CurrentRows);int rowIndex = dv.Find("小张 ");if (rowIndex == -1)

Response.Write(" 没有找到! ");else

Response.Write(dv[rowIndex][" 姓名 "].ToString() + dv[rowIndex][" 数学 "].ToString());

//dg.DataSource = dv;dg.DataBind();Conn.Close();

}</script><ASP:DataGrid id="dg" runat="server"/>

Page 43: 第 6 章  ADO.NET 数据访问接口

数据控件 数据控件属于 Web服务器端控件,数据

控件包括三个控件: Repeater 控件, DataList 控件和

DataGrid 控件。 其中最常用的数据控件是 DataGrid 控件,

也是功能最强大的数据控件。

Page 44: 第 6 章  ADO.NET 数据访问接口

Repeater 数据控件 Repeater 控件的主要功能是以更自由的方式来控制

数据,用非表格的形式来展现数据。 Repeater 控件最关键的部分是摸板,允许用户定义 5 种摸板:

ItemTemplate ,数据摸板,这是 Repeater 控件必须的 AlternatingItemTemplate ,隔行数据模板,可选参数 SeparatorTemplate ,分割线模板,可选参数 HeaderTemplate ,抬头模板,可选参数 FooterTemplate ,结尾模板,可选参数

Page 45: 第 6 章  ADO.NET 数据访问接口

DataList 数据控件 DataList 数据控件在 Repeater 数据控件

基础上进行了扩展,除了含有 Repeater 的功能外,还可以设置单行笔数等等。

DataList 控件和 Repeater 控件数据输出的格式都取决于样板的定义,不同点是:DataList 在浏览器中会以表格的形式输出。

Page 46: 第 6 章  ADO.NET 数据访问接口

DataGrid 数据控件 DataGrid 数据控件是这 3 个数据控件

中最强大的一个。 使用 DataGrid 控件可以自动显示表的

内容。

利用 DataReader 对象或者 DataSet对象和 DataGrid 控件进行绑定,就可以进行数据输出。

Page 47: 第 6 章  ADO.NET 数据访问接口

小结 本 章 介 绍 了 框 架 类 中 ADO.NET 的 结 构 , 理 解

ADO.NET 的组成以及 4 种 .NET 数据提供程序的用途用法。

重点掌握 SQL 语句的分类以及使用、 Connection对象、如何使用 Command 对象执行各种 SQL 语句,如何利用 ADO.NET 实现事务处理。

熟悉 DataReader 对象、 DataAdapter 对象的概念以及使用方法。熟练掌握 DataSet 对象,了解Repeater 数据控件和 DataList 控件的使用,掌握DataGrid 控件的使用。

Page 48: 第 6 章  ADO.NET 数据访问接口

本章习题 6-1 图示 ADO.NET 的结构。 6-2 简述 .NET 提供的 4 种数据提供程序,以及使用范围。 6-3 列举 4 个 SQL 聚合函数,并阐述其功能,以及如何利用

ADO.NET 执行? 6-4 如何理解分组查询,使用分组查询的时候应该注意什么? 6-5 如何利用 ADO.NET 实现事务?事务有什么特点? 6-6 DataSet 对象是用什么描述的,如何将数据填充到

DataSet 对象中? 6-7 将程序 6-10 、 6-11 、 6-12 改编成操作 SQL Server

数据库的程序。(上机完成) 6-8 如何实现分页显示?编写程序实现数据库分页,要求每页显

示 8 条记录。(上机完成)。 6-9 编写程序,利用 DataGrid 控件实现数据库表的动态添加、

删除和修改。(上机完成)。