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

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

第十章 Java 数据库编程. 内容提要 数据库有关概念; 介绍 JDBC 的结构; 重点介绍 JDBC 访问几种数据库的基本过程;
ADO.NET – 连接数据库. 2 课程地位 STB SQL Server XML PSPM ASP.NET Oracle OOAD Computer Base HTML&JavaScript OOP\Java C C SQL Base JSP/Servlet EJB/WebService C#
Java 技术与应用 数据库应用 ( 第 14 章 ) 西安交大 卫颜俊 2008 年 12 月 电子信箱: QQ: 网站 : /java.
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
主讲:史治平 地址:四川电大计算机教研室 电话:
第6章 数据库管理软件Access 年秋.
目 录 第 1 章 数据库技术基础 第 2 章 SQL Server基础 第 3 章 数据库管理 第 4 章 查询和视图
十一 ASP对数据库的访问.
第7章利用ADO.NET 进行数据访问.
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
高等院校计算机教材系列 数据库原理与应用(第2版) 任课教师:刘雅莉
第八章 DataGrid 與 DataTable 瀏覽器 DataTable DataGrid 存取 顯示表格 暑資碩三 房玄博 報告.
ASP.NET 網頁製作教本 – 從基本語法學起
ADO .NET 簡介.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
第8章 设计数据库应用网站 本章讲述的主要内容 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL查询基础
Access数据库程序设计 总复习.
数据库原理及应用 《数据库原理及应用》课程组 荆楚理工学院.
第3章 SQL的基础知识 数据库管理及应用 3.1 SQL简介 3.2 SQL的数据模型 3.3 标识符 3.4 使用SQL语句管理数据库
第7章 数据库基础知识 SQL常用命令使用方法 (1) 数据记录筛选: sql="select * from 数据表
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
文科计算机小公共课规划教材 Access 程序设计.
计算机应用基础 上海大学计算中心.
第3章 数据查询与SQL命令.
数据库原理 Database Principles 第五章 数据库完整性 Database Principles.
Access 2007 進銷存管理系統實作 文魁資訊股份有限公司.
第六章 學習SQL語言.
Visual C# 2010 程式設計經典 第15章 ADO .NET與資料工具.
課程名稱:資料庫系統 授課老師:李春雄 博士
Chapter 12 T-SQL 語法與 ASP.NET.
二.資料庫系統建立與管理 Access 資料庫:windows下的單機資料庫 Access 操作 Mysql資料庫介紹.
2、掌握SQL中各种查询方法和数据更新方法 3、掌握SQL中视图的定义方法和用法 4、掌握SQL的授权机制
Chap 10 SQL定義、操作與控制指令.
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
ASP.NET 網頁製作教本 – 從基本語法學起
ADO.NET.
主 讲 教 师:陆有军 Web技术与应用 第六章 ADO.NET 主 讲 教 师:陆有军
課程名稱:資料庫系統 授課老師:李春雄 博士
上述代码规范了 INSERT 语句的编写规范,其中:
第2章 ADO.NET 2.0概述.
第7章 ADO.NET操作SQL Server数据库
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
讲课人:王璞 浙江工商职业技术学院.
第9章 事务.
5.1.1 使用 ExecuteReader()操作数据库
操作数据库 C#程序设计课程组.
第五章 認識 SQL語言與 資料型別.
SQL SERVER 一些经典语句 1.
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
第5章 .NET框架类 5.
第十二章 SQL語言簡介 講授大綱: 新增資料庫 新增資料表 新增資料 修改資料 刪除資料 查詢資料 透視ASP.NET-第12章
第3章 ASP.NET程序设计基础 3.
C# 程序设计教程 同济大学计算机系基础学科组
第 8 章 VB.NET与数据库应用程序 本章主要内容: ADO.NET体系结构; VB.NET与SQL Server数据库的连接;
第五讲 酒店客房管理系统(一) 教育部“十二五”职业教育国家规划教材
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
第十讲 学生成绩管理系统(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
CS, ZJU 4/18/2019 Chapter 7 数据库.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
通讯录管理系统设计 常州工程职业技术学院 计算机技术系.
第 10 章 ADO.NET與XML.
SQL查询语句 蔡海洋.
第三章 SQL Server数据管理.
ASP.NET实用教程 清华大学出版社 第9章数据库应用 教学目标 教学重点 教学过程 2019年5月3日.
8 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
第4章 数据查询.
Presentation transcript:

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

内容提要 本章首先介绍ADO.NET的结构。 然后将对ADO.NET的 Connection对象,Command对象、DataReader和DataAdapter对象作深入的研究。 作为数据库的基础,将对SQL语句作简要的介绍,介绍基本查询语句、聚合函数、分组查询以及交叉查询。 最后介绍常用的数据控件:Repeater数据控件、DataList数据控件和DataGrid数据控件。

ADO.NET的结构

数据提供程序 表6-1 .NET 数据提供程序的四个核心对象 对象 说明 Connection 建立与特定数据源的连接。 Command 对数据源执行命令。 DataReader 从数据源中读取只进且只读的数据流。 DataAdapter 用于将数据填充到 DataSet。

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。

OLE DB .NET 数据提供程序 对应OLE DB .NET的4个核心对象分别是:OleDbConnection、OleDbCommand、OleDbDataReader和OleDbDataAdapter。这4个对象包含在System.Data.OleDb命名控件中,需要将这个命名空间引入到文件中 。 目前主要用来访问Access、Foxpro等简单的数据源。

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网站下载驱动程序。

ODBC.NET数据提供程序 对应ODBC .NET的4个核心对象分别是:OdbcConnection、OdbcCommand、OdbcDataReader和OdbcDataAdapter。这4个对象包含在System.Data.Odbc命名控件中,需要将这个命名空间引入到文件中。 通过ODBC建立的数据源都可以通过ODBC.NET数据提供程序访问。

DataSet简介 ADO.NET的核心组件是DataSet,内部用XML描述数据,具有平台无关性。DataSet中常用的对象是DataTable和DataRow等等。 DataSet通过DataAdapter对象从数据源得到数据,DataAdapter是连接DataSet和数据库的一个桥梁,因此命名为:“数据适配器”。

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:数据控制语言)等等。

表6-2 SQL语句分类 (DDL) (DML) (TCL) (DCL) SQL分类 描述 数据定义语言 数据定义语言(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等等。

基本SQL语句 1. 基本句型一:(最简单的SELECT语句) SELECT 字段名 FROM 数据表 基本的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表中的学号和姓名取出来,并将语文、数学和英语成绩相加产生虚拟的总成绩。

基本句型二 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 '江%'。

基本句型三 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表中取出前五条记录的所有字段。

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 (字段新值)

聚合函数 聚合函数在信息管理系统经常使用,功能是做一些基本的统计和计算。 聚合函数有5个,分别是SUM函数、AVG函数、COUNT函数、MAX函数和MIN函数。

SUN函数 (2)AVG函数,功能是算出某个字段的平均值。 (3)COUNT函数,功能是算出返回记录的行数。 例. SELECT SUM(数学) As Total FROM grade 功能说明:求出所有学生数学成绩总和,这个数值的列名为Total。在SQL输入窗口中输入, (2)AVG函数,功能是算出某个字段的平均值。 例. SELECT AVG(数学) As Average FROM grade (3)COUNT函数,功能是算出返回记录的行数。 例. SELECT COUNT(*) As Counts FROM grade 功能说明:求出满足条件的记录总数。

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

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

分组查询 在使用分组查询的时候,有4点需要注意。 (1)WHERE子句必须放在GROUP BY子句之前。 (2)HAVING子句中只能包含分组字段或者聚合函数。 (3)SELECT语句选择的列只能是分组字段或者聚合函数。 (4)HAVING必须放在GROUP BY子句之后。

交叉查询 考虑3个表:学生表(Student)、课程表(Course)和选课表(SC)表的关系如图7-16所示。 其中: (1)学生表中的sno表示学生学号,sname表示学生姓名。 (2)课程表中cno表示课程的编号,cname表示课程的名称。 (3)选课表中的sno表示学生学号,cno表示课程编号。

查找选择课程为“软件工程”的所有同学姓名?可以利用如下的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。该查询实现了三个表之间的交叉查询。

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" />

使用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" />

使用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" />

Command对象 建立数据连接以后,利用Command对象来执行命令并从数据源返回结果。 Command对象常用的构造函数包括两个参数,1个是要执行的SQL语句,另一个是已经建立的Connnection对象,基本语法是: OleDbCommand Comm=new OleDbCommand("select * from grade",Conn);

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" />

案例名称:使用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>

程序中最关键的是如何将变量加到SQL语句中去。“SQL = ”Select 程序中最关键的是如何将变量加到SQL语句中去。“SQL = ”Select * from grade where 姓名 like ‘%“ + str + ”%’“”语句中str是变量,要得到正确的格式只要按照下面的两个步骤进行操作。 (1)写出正确的SQL语句,SQL =" Select * from grade where 姓名 like '%敏%'",因为姓名是文本型变量,所以必须加上单引号,在SQL语句中,用单引号表示字符型变量。 (2)确定要替换的变量,这里是要将“敏”替换成变量Key。替换的规则是:删除“敏”字,在原字符串“敏”的位置,首先加上两个双引号,然后在两个双引号之间加上两个加号,最后将变量加到两个加号中间。

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" />

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>

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 '%张%'"; Trans.Commit(); Response.Write("事务执行成功!"); } catch(Exception ex) { Trans.Rollback(); Response.Write("出现错误,事务已经回滚!"); finally { Conn.Close(); </script> ADO.NET事务处理

DataReader对象 取DataReader对象的数据,有两种方法: 1、通过和DataGrid等数据控件绑定,直接输出,使用方法如程序6-4.aspx。 2、另一种方法是利用循环将其数据取出

案例名称:使用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+="<TD>" + dr["学号"].ToString() + "</TD>"; html+="<TD>" + dr["姓名"].ToString() + "</TD>"; html+="<TD>" + dr["数学"].ToString() + "</TD>"; } html+="</Table>"; finally{//关闭链接 dr.Close(); Conn.Close(); Response.Write(html); </Script>

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" />

使用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"/>

案例名称:使用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"/>

DataSet对象 DataSet封装在命名空间“Syste.Data”中。DataSet中可以包含任意数量的DataTable(数据表),且每个DataTable对应一个数据库中的数据表和视图。 通过DataAdapter的Fill方法,将表内容填充到DataSet对象中,而且可以填充多个表。利用别名来区分。比如“da.Fill(ds,"grade1");”的功能是将da对象中的数据填充到ds对象中,并起别名“grade1”,程序6-12.aspx说明了Fill方法的使用。

案例名称:自动生成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"/>

操作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"/>

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"/>

使用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"/>

数据控件 数据控件属于Web服务器端控件,数据控件包括三个控件: Repeater控件,DataList控件和DataGrid控件。

Repeater数据控件 Repeater控件的主要功能是以更自由的方式来控制数据,用非表格的形式来展现数据。Repeater控件最关键的部分是摸板,允许用户定义5种摸板: ItemTemplate,数据摸板,这是Repeater控件必须的 AlternatingItemTemplate,隔行数据模板,可选参数 SeparatorTemplate,分割线模板,可选参数 HeaderTemplate,抬头模板,可选参数 FooterTemplate,结尾模板,可选参数

DataList数据控件 DataList数据控件在Repeater数据控件基础上进行了扩展,除了含有Repeater的功能外,还可以设置单行笔数等等。 DataList控件和Repeater控件数据输出的格式都取决于样板的定义,不同点是:DataList在浏览器中会以表格的形式输出。

DataGrid数据控件 DataGrid数据控件是这3个数据控件中最强大的一个。 使用DataGrid控件可以自动显示表的内容。 利用DataReader对象或者DataSet对象和DataGrid控件进行绑定,就可以进行数据输出。

小结 本章介绍了框架类中ADO.NET的结构,理解ADO.NET的组成以及4种.NET数据提供程序的用途用法。 重点掌握SQL语句的分类以及使用、Connection对象、如何使用Command对象执行各种SQL语句,如何利用ADO.NET实现事务处理。 熟悉DataReader对象、DataAdapter对象的概念以及使用方法。熟练掌握DataSet对象,了解Repeater数据控件和DataList控件的使用,掌握DataGrid控件的使用。

本章习题 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控件实现数据库表的动态添加、删除和修改。(上机完成)。