1 / 48

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

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

dylan
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. ADO.NET的结构

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

  5. 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。

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

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

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

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

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

  11. 表6-2 SQL语句分类

  12. 基本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表中的学号和姓名取出来,并将语文、数学和英语成绩相加产生虚拟的总成绩。

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

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

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

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

  17. 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 • 功能说明:求出满足条件的记录总数。

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

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

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

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

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

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

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

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

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

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

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

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

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

  31. 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>

  32. 案例名称:使用事务的基本格式 程序名称: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> ADO.NET事务处理

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

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

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

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

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

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

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

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

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

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

  43. 数据控件 • 数据控件属于Web服务器端控件,数据控件包括三个控件: • Repeater控件,DataList控件和DataGrid控件。 • 其中最常用的数据控件是DataGrid控件,也是功能最强大的数据控件。

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

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

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

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

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

More Related