教学材料《Web应用开发》-第六章_第1页
教学材料《Web应用开发》-第六章_第2页
教学材料《Web应用开发》-第六章_第3页
教学材料《Web应用开发》-第六章_第4页
教学材料《Web应用开发》-第六章_第5页
已阅读5页,还剩255页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.1ADO.NET概述ASP.NET使用ADO.NET技术访问数据库。ADO.NET是Microsoft.NETFramework的一个数据访问子系统,它是一种新的数据访问编程模型,为创建分布式数据共享应用程序提供了一组处理数据的类,它提供了对关系数据、XML和应用程序数据的访问,是一种高级的应用程序编程接口。下一页返回6.1ADO.NET概述6.1.1ADO.NET简介ADO.NET是由Microsoft公司推出的,由先前广泛使用的ADO改进而来,它提供了平台互用和可收缩的数据访问功能。.NET使用XML(可扩展标示语言)作为数据传送的格式,任何可以读取XML格式的应用程序都可以对数据进行处理。实际上,接收组件根本不需要ADO.NET组件。它可以是基于MicrosoftVisualStudio的解决方案或在任何平台上运行的任何应用程序。上一页下一页返回6.1ADO.NET概述ADO.NET被设计成为遵循一般的更没有面向数据库缺陷的数据库访问准则,它搜集了所有的和数据访问有关的类,这些类由一些数据容器对象组成。ADO.NET是为.NET数据库应用程序定义的开发办法,是一个对数据库的整套设计环境,而不是像ADO那样只是围绕着数据访问和数据处理。ADO.NET和ADO不同之处还在于,它是一个新的数据访问程序模型,需要更加透彻的理解。上一页下一页返回6.1ADO.NET概述ADO.NET实现了离线方式访问数据库。使用传统的客户端/服务器的Web应用程序模型中,数据源连接会在程序的整个生存期中一直保持打开,因为网络一断开,Web页基本上是无状态的。而ADO.NET技术实现了在断开的概念下客户端对服务器上数据库的访问,应用程序只有在要取得数据或是更新数据的时候才对数据源进行连接,所以可以减少应用程序对服务器资源的占用,提高应用程序的效率。上一页下一页返回6.1ADO.NET概述6.1.2ADO.NET对象模型ADO.NET组件是为了从数据操作中分解出数据访问而设计的。ADO.NET有两个核心组件构成:DataSet和.NETFramework数据提供程序。ADO.NET的对象模型如图

6-1所示。DataSet是ADO.NET的断开式结构的核心组件。DataSet独立于任何数据源,因此,它可以用于多种不同的数据源,用于XML数据,或用于管理应用程序本地的数据。上一页下一页返回6.1ADO.NET概述DataSet包含一个或多个DataTable对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关DataTable对象中数据的关系信息组成。.NETFramework数据提供程序,可以实现数据操作和对数据的快速、只进、只读访问。它由Connection、Command、DataReader和DataAdapter对象组成。①Connection对象提供与数据源的连接。②Command对象使用户能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。上一页下一页返回6.1ADO.NET概述③DataReader从数据源中提供高性能的数据流。④DataAdapter提供连接DataSet对象和数据源的桥梁。DataAdapter使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中,并对DataSet中数据的更改与数据源保持一致。上一页下一页返回6.1ADO.NET概述6.1.3.NETFramework数据提供程序.NETFramework数据提供程序用于连接到数据库、执行命令和检索结果。用户可以直接处理检索到的结果,或将其放入ADO.NETDataSet对象,以便与来自多个源的数据或在层之间进行远程处理的数据组合在一起,以特殊方式向用户公开。.NETFramework数据提供程序是轻量的,它在数据源和代码之间创建了一个最小层,以便在不以功能为代价的前提下提高性能。上一页下一页返回6.1ADO.NET概述.NETFramework针对不同的数据库,设计了四种数据提供程序,见表6-1。1.SQLServer.NETFramework数据提供程序SQLServer.NETFramework数据提供程序使用其自身的协议与SQLServer通信。由于它经过了优化,可以直接访问SQLServe而不用添加OLEDB或开放式数据库连接(ODBC)层,因此它是轻量的,并具有良好的性能。上一页下一页返回6.1ADO.NET概述SQLServer.NETFramework数据提供程序支持本地事务和分布式事务。对于分布式事务,默认情况下,SQLServer.NETFramework数据提供程序自动登记在事务中,并从Windows组件服务或System.Transactions获取事务的详细信息。SQLServer.NETFramework数据提供程序,适用于SQLServer7.0或更高版本。上一页下一页返回6.1ADO.NET概述SQLServer.NETFramework数据提供程序位于System.Data.SqlClient命名空间,使用时需要在应用程序中包含该命名空间,代码如下:usingSystem.Data.SqlClient;2.OLEDB.NETFramework数据提供程序OLEDB.NETFramework数据提供程序通过COMInterop使用本机OLEDB启用数据访问。OLEDB.NETFramework数据提供程序支持本地事务和分布式事务。上一页下一页返回6.1ADO.NET概述对于分布式事务,默认情况下,OLEDB.NETFramework数据提供程序自动登记在事务中,并从Windows2000组件服务获取事务详细信息。OLEDB.NETFramework数据提供程序,适用于所有提供了OLEDB接口的数据源,包括Access、SQLServer6.5或更低版本的数据库等。上一页下一页返回6.1ADO.NET概述OLEDB.NETFramework数据提供程序类位于System.Data.OleDb命名空间,使用时需要在应用程序中包含该命名空间,代码如下:usingSystem.Data.OleDb;图6-2对比了SQLServer.NETFramework数据提供程序和OLEDB.NETFramework数据提供程序的异同。OLEDB.NETFramework数据提供程序通过OLEDB服务组件(提供连接池和事务服务)和数据源的OLEDB提供程序与OLEDB数据源进行通信。上一页下一页返回6.1ADO.NET概述因此,使用SQLServer.NET数据提供程序访问SQLServer数据库比使用OLEDB.NET数据提供程序效率更高。3.ODBC.NETFramework数据提供程序ODBC.NETFramework数据提供程序使用本机ODBC驱动程序管理器(DM)启用数据访问。ODBC数据提供程序支持本地事务和分布式事务。对于分布式事务,默认情况下,ODBC数据提供程序自动登记在事务中,并从Windows2000组件服务获取事务的详细信息。上一页下一页返回6.1ADO.NET概述ODBC.NETFramework数据提供程序,适合于所有提供了ODBC接口的数据源。ODBC.NETFramework数据提供程序类位于System.Data.Odbc命名空间,使用时需要在应用程序中包含该命名空间,代码如下:usingSystem.Data.Odbc;上一页下一页返回6.1ADO.NET概述4.Oracle.NETFramework数据提供程序Oracle.NETFramework数据提供程序通过Oracle客户端连接软件启用对Oracle数据源的数据访问。该数据提供程序支持本地事务和分布式事务。Oracle.NETFramework数据提供程序,适用于Oracle数据源,支持Oracle客户端软件8.1.7版或更高版本。上一页下一页返回6.1ADO.NET概述Oracle.NETFramework数据提供程序类位于System.Data.OracleClient命名空间中,并包含在System.Data.OracleClient.dll程序集中。使用时需要在应用程序中包含该命名空间,代码如下:usingSystem.Data;usingSystem.Data.OracleClient;上一页返回6.2ADO.NET的对象6.2.1Connection对象Connection对象是用来连接应用程序和数据源的“桥梁”,要存取数据源中的数据,首先要建立程序和数据源之间的连接。在创建了Connection对象之后,就可以使用Connection的属性、方法和事件。Connection对象的属性、方法见表6-2和表6-3。微软提供了4种数据库连接方式。①System.Data.SqlClient.SqlConnection下一页返回6.2ADO.NET的对象②System.Data.OleDb.OleDbConnection③System.Data.Odbc.OdbcConnection④System.Data.OracleClient.OracleConnection本书主要介绍SqlConnection、OleDbConnection的使用,其他数据库的连接方式与它们类似。1.使用SqlConnection连接SQLServerSqlConnection用于连接MicrosoftSQLServer7.0版或更高版本。上一页下一页返回6.2ADO.NET的对象(1)如果SQLServer采用集成Windows身份验证登录,连接代码如下所示:SqlConnectionconn=newSqlConnection();conn.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";conn.Open();上一页下一页返回6.2ADO.NET的对象(2)如果采用SQLServer身份验证登录,连接代码如下所示:SqlConnectionconn=newSqlConnection();conn.ConnectionString="server=localhost;database=jwgl;uid=sa;pwd=sa;";conn.Open();上一页下一页返回6.2ADO.NET的对象说明:①上面代码首先建立了一个SqlConnection对象的实例conn;②conn.ConnectionString:通过conn调用ConnectionString属性(数据源连接字符串),并对其进行了设置,参数间用分号分隔,本例连接的是jwgl数据库,如果采用集成Windows身份验证登录,将integratedsecurity设置为SSPI即可;采用SQLServer身份验证登录,将integratedsecurity设置为SSPI即可;采用SQLServer身份验证登录,则需设置用户名和密码。上一页下一页返回6.2ADO.NET的对象ConnectionString的参数及作用见表6-4。(3)conn.Open():调用Open方法打开数据源连接。2.使用OleDbConnection连接(1)连接SQLServer6.5及以下版本,连接代码如下:上一页下一页返回6.2ADO.NET的对象stringstr="Provider=SQLOLEDB;DataSource=localhost;InitialCatalog=jwgl;IntegratedSecurity=SSPI;";OleDbConnectionConn=newOleDbConnection(str);Conn.Open();说明:上一页下一页返回6.2ADO.NET的对象Provider=SQLOLEDB;用来指定SQLServer的通用数据源。(2)连接Access数据库,连接代码如下:stringstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=d:\db\jwgl.mdb;Persist时SecurityInfo=False;";上一页下一页返回6.2ADO.NET的对象OleDbConnectionConn=newOleDbConnection(str);Conn.Open();说明:Provider=Microsoft.Jet.OLEDB.4.0;是指数据库提供者,这里使用的是MicrosoftJet引擎,也就是Access中的数据引擎,ASP.NET就是凭借该引擎和Access的数据库连接的。上一页下一页返回6.2ADO.NET的对象[例6-1]使用OleDbConnection连接Access数据库jwgl.mdb,并显示student表的数据。(1)启动VisualStudio2005,新建一个项目chapter06,在其中新建一个页面6_1.aspx。(2)在工具箱的“数据”栏中拖入一个GridView控件到设计窗口中。(3)在6_1.aspx.cs中添加using上一页下一页返回6.2ADO.NET的对象System.Data.OleDb命名空间,并在Page_Load中输入如下代码:protectedvoidPage_Load(objectsender,EventArgse){//创建数据库连接字符串返回上一页下一页6.2ADO.NET的对象StringconnStr="Provider=microsoft.Jet.Oledb.4.0;Datasource="+Server.MapPath("database/jwgl.mdb");//创建Connection对象OleDbConnectionconn=newOleDbConnection(connStr);//创建Command对象返回上一页下一页6.2ADO.NET的对象OleDbCommandcmd=newOleDbCommand("select*fromstudent",conn);//打开连接conn.Open();//从数据库取回数据到DataReaderOleDbDataReaderreader=cmd.ExecuteReader();//把DataReader绑定到GridView控件返回上一页下一页6.2ADO.NET的对象GridView1.DataSource=reader;//在GridView中显示绑定数据GridView1.DataBind();//关闭DataReaderreader.Close();GridView1.DataSource=reader;返回上一页下一页6.2ADO.NET的对象//在GridView中显示绑定数据GridView1.DataBind();//关闭DataReaderreader.Close();//关闭连接conn.Close();上一页下一页返回6.2ADO.NET的对象}(4)运行程序,效果如图6-3所示。程序说明:本例中使用Connection对象建立了与数据库的连接,其中Provider属性指定使用的数据库引擎Microsoft.Jet.Oledb.4.0,Datasource属性指定数据文件的物理位置,这里使用Server.MapPath方法将虚拟路径转换成物理路径。上一页下一页返回6.2ADO.NET的对象为了显示数据表中的记录,本例中还使用了Command对象、DataReader对象和GridView控件,这些将在后面的章节中进行介绍。上一页下一页返回6.2ADO.NET的对象6.2.2Command对象当连接好数据源后,可以使用Command对象对数据源执行一些命令操作。命令操作包括对数据源执行查询、添加、删除和修改等各种操作,操作实现的方法可以使用SQL语句,也可以使用存储过程。Command对象也可以分成4种,分别是SqlCommand、OleDbCommand、OdbcCommand和OracleCommand,在实际的编程过程中应根据访问的数据源不同,选择相应的Command对象。上一页下一页返回6.2ADO.NET的对象创建Command对象的语法格式为:(1)SQLServer数据库SqlCommand对象名=newSqlCommand(cmdText,connection)(2)OLEDB数据库OleDbCommand对象名=newOleDbCommand(cmdText,connection)上一页下一页返回6.2ADO.NET的对象语法说明:cmdText参数为要执行的SQL命令,connection参数为使用的数据库连接对象,创建Command对象时这两参数若省略,则可在创建Command对象之后分别进行指定。下面介绍Command对象的常用属性和方法。Command对象的常用属性见表6-5。对表6-5作以下说明。上一页下一页返回6.2ADO.NET的对象(1)CommandText属性获取或设置要对数据源执行的SQL语句,可以是任何合法的SQL语句(包括INSERT、UPDATE、SELECT等)。除了可以执行SQL语句外,当CommandType设置为存储过程时,CommandText的值就是存储过程的名称。(2)CommandType属性获取或设置Command对象要执行命令的类型。可取值为:Text、TableDirect、StoreProcdure;上一页下一页返回6.2ADO.NET的对象其含义分别为:SQL

语句、数据表名和存储过程;默认为:Text。如:将CommandType赋值为存储过程的代码为:Mycommand.CommandType=Command.StoreProcedure;(3)CommandTimeOut属性获取或设置在终止对执行命令的尝试并生成错误之前的等待上一页下一页返回6.2ADO.NET的对象时间。单位为秒(s),若在此时间内Command对象无法执行SQL命令,则返回失败。值为0表示不限制,默认为30s。Command对象的常用方法见表6-6。对表6-6作以下说明。(1)ExecuteNonQuery方法ExecuteNonQuery方法执行更新操作,主要执行UPDATE、INSERT和DELETE有关的SQL语句操作,上一页下一页返回6.2ADO.NET的对象返回值是命令影响的行数。对于SELECT语句,返回值为-1。如果发生回滚,返回值也为-1。例如:创建一个SqlCommand,然后使用ExecuteNonQuery方法执行(queryString表示SQL语句如UPDATE、INSERT或DELETE),代码如下:privatestaticvoidCreateCommand(stringqueryString,string上一页下一页返回6.2ADO.NET的对象connectionString){SqlConnectionconnection=newSqlConnection(connectionString));SqlCommandcommand=newSqlCommand(queryString,connection);command.Connection.Open();上一页下一页返回6.2ADO.NET的对象command.ExecuteNonQuery();//执行Command命令}(2)ExecuteReader方法ExecuteReade方法通常与查询命令一起使用,并且返回一个DataReader对象,根据使用的提供者不同,返回一个SqlDataReader对象或者OleDbDataReader对象。上一页下一页返回6.2ADO.NET的对象DataReader(下节将介绍DataReader对象)提供了只向前的快速读取数据库的数据的方法,如果只是为了读取数据库中的内容,最好使用这种方法。例如:创建一个SqlCommand,然后应用ExecuteReader()方法来创建DataReader对象来对数据源进行读取,代码如下://ExecuteReader方法创建DataReader对象上一页下一页返回6.2ADO.NET的对象SqlCommandcommand=newSqlCommand(queryString,connection);SqlDataReaderreader=command.ExecuteReader();while(reader.Read()){上一页下一页返回6.2ADO.NET的对象ConSQLe.WriteLine(String.Format("{0}",reader[0]));}(3)ExecuteScalar方法ExecuteScalar方法执行查询,但返回的是一个单值。如果在常规查询语句中调用该方法,则只读取第一行的列的值,而丢弃所有其他值。此方法多用于查询聚合值的情况,上一页下一页返回6.2ADO.NET的对象如用到COUNT()、SUM()或AVG()函数的SQL命令。例如:用SqlCommand对象的ExecuteScalar方法来返回表中记录的数目,代码如下:stringsqlstr="SELECTCount(*)FROMStudents";SqlCommandcommand=newSqlCommand(sqlstr,connection);上一页下一页返回6.2ADO.NET的对象Int32count=(Int32)command.ExecuteScalar();//将返回的记录数目强制转换成整型[例6-2]使用SQLConnection连接SQLServer数据库jwgl,并实现显示、添加、删除、修改数据的功能。对数据库中的记录进行添加、删除、修改等操作可用Command对象的ExecuteNonQuery()方法实现。上一页下一页返回6.2ADO.NET的对象(1)在chapter06项目中,新建一个页面6_2.aspx。(2)在设计窗口中进行如图6-4所示的布局。拖入两个TextBox及三个Label,设置其Text属性分别为“学生信息管理”、“学号”和“姓名”。(3)拖入两个RadioButton按钮,设置其Text属性为“按学号查询”和“按姓名查询”,并且将GroupName属性值统一修改为“search”。(4)拖入一个GridView控件到设计窗口中。上一页下一页返回6.2ADO.NET的对象(5)拖入五个Button按钮,设置其Text属性为“添加”、“删除”、“修改”、“查询”和“刷新”。(6)下面进行程序设计。在6_2.aspx.cs中加入usingSystem.Data.SqlClient命名空间,并在Page_load事件中,输入代码如下:protectedvoidPage_Load(objectsender,EventArgse)上一页下一页返回6.2ADO.NET的对象{SqlConnectioncon=newSqlConnection();con.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";SqlCommandcmd=newSqlCommand();cmd.CommandText="select*fromstudent";上一页下一页返回6.2ADO.NET的对象cmd.Connection=con;SqlDataAdaptersda=newSqlDataAdapter();sda.SelectCommand=cmd;con.Open();//打开数据库连接DataSetds=newDataSet();sda.Fill(ds,"student");//用student表填充数据集上一页下一页返回6.2ADO.NET的对象con.Close();//关闭数据库连接this.GridView1.DataSource=ds;this.GridView1.DataBind();}(7)单击“添加”按钮用于添加学生信息,在该事件中用到INSERT插入语句将信息添加到数据库中,“添加”的程序代码如下:上一页下一页返回6.2ADO.NET的对象protectedvoidButton1_Click(objectsender,EventArgse){SqlConnectioncon=newSqlConnection();con.ConnectionString=“server=localhost;database=jwgl;integratedsecurity=SSPI;”;SqlCommandcmd=newSqlCommand();上一页下一页返回6.2ADO.NET的对象cmd.CommandText="insertintoStudent(Sid,SName)values("+this.TextBox1.

Text+",'"+this.TextBox2.Text+"')";//添加学生信息cmd.Connection=con;con.Open();//打开数据库连接上一页下一页返回6.2ADO.NET的对象cmd.ExecuteNonQuery();//用ExecuteNonQuery()的方法来执行查询语句con.Close();//关闭数据库的连接}运行页面,在文本框中添加文本,单击“添加”按钮,信息将会添加到GridView控件中,然后单击“刷新”按钮加以显示。上一页下一页返回6.2ADO.NET的对象(8)单击“删除”按钮用于删除学生信息,在该事件中用DELETE删除语句将删除数据库中对应的信息,“删除”的程序代码如下:protectedvoidButton2_Click(objectsender,EventArgse){SqlConnectioncon=newSqlConnection();上一页下一页返回6.2ADO.NET的对象con.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";SqlCommandcmd=newSqlCommand();cmd.CommandText="deletefromstudentwhereSid='"+this.TextBox1.Text+"'";//根据学生的编号来删除相应的学生的信息cmd.Connection=con;con.Open();//打开连接上一页下一页返回6.2ADO.NET的对象cmd.ExecuteNonQuery();//用ExecuteNonQuery()的方法来执行查询语句con.Close();//关闭连接}运行页面,在第一个文本框中添加要删除的文本信息,单击“删除”按钮,数据库中对应的该条信息将会被删掉,然后单击“刷新”按钮,此时GridView控件中的该条记录将被删除掉。上一页下一页返回6.2ADO.NET的对象(9)单击“修改”按钮用于修改学生信息,在该事件中用UPDATE修改语句将数据库中的信息加以修改,“修改”的程序代码如下:protectedvoidButton3_Click(objectsender,EventArgse){SqlConnectioncon=newSqlConnection();上一页下一页返回6.2ADO.NET的对象(con.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";SqlCommandcmd=newSqlCommand();cmd.CommandText="updatestudentsetSName='"+this.TextBox2.Text+"'"+"whereSid='"+this.TextBox1.Text+"'";//根据学生的编号来修改相应的学生的信息上一页下一页返回6.2ADO.NET的对象cmd.Connection=con;con.Open();//打开数据库的连接cmd.ExecuteNonQuery();//用ExecuteNonQuery()的方法来执行查询语句con.Close();//关闭数据库的连接}运行页面,在文本框中输入要修改的文本信息,单击“修改”上一页下一页返回6.2ADO.NET的对象按钮,数据库中对应的该条信息将会被修改,然后单击“刷新”按钮,此时GridView控件中的该条记录将被修改掉。(10)在文本框中添加要查询的文本信息,并且选中所对应单选按钮使它处于选中状态,单击“查询”按钮,此时GridView控件中所要查找的信息将会被显示出来,在“查询”按钮中添加代码如下:protectedvoidButton4_Click(objectsender,EventArgse)上一页下一页返回6.2ADO.NET的对象

{SqlConnectioncon=newSqlConnection("server=localhost;database=jwgl;integratedsecurity=SSPI;");con.Open();//打开数据库的连接if(this.RadioButton1.Checked==true)上一页下一页返回6.2ADO.NET的对象

{SqlCommandcmd=newSqlCommand();DataSetds=newDataSet();SqlDataAdaptersda=newSqlDataAdapter("select*fromstudentwhere

Sid='"+this.TextBox1.Text+"'",con);上一页下一页返回6.2ADO.NET的对象sda.Fill(ds,"student");//把student表填充到数据集中this.GridView1.DataSource=ds;this.GridView1.DataBind();//将数据绑定到GridView控件中}if(this.RadioButton2.Checked==true)上一页下一页返回6.2ADO.NET的对象{SqlCommandcmd=newSqlCommand();DataSetds=newDataSet();SqlDataAdaptersda=newSqlDataAdapter("select*fromstudentwhereSName='"+this.TextBox2.Text+"'",con);sda.Fill(ds,"student");上一页下一页返回6.2ADO.NET的对象this.GridView1.DataSource=ds;this.GridView1.DataBind();//将数据绑定到GridView控件中}con.Close();//关闭数据库的连接}(11)在“刷新”按钮中添加代码,本代码将实现对窗体刷新上一页下一页返回6.2ADO.NET的对象GridView控件的功能,“刷”按钮的代码如下:protectedvoidButton5_Click(objectsender,EventArgse){SqlConnectioncon=newSqlConnection();con.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";上一页下一页返回6.2ADO.NET的对象

SqlCommandcmd=newSqlCommand();cmd.CommandText="select*fromstudent";//查询student表cmd.Connection=con;con.Open();//打开数据库的连接SqlDataAdaptersda=newSqlDataAdapter();sda.SelectCommand=cmd;上一页下一页返回6.2ADO.NET的对象cmd.ExecuteNonQuery();//用ExecuteNonQuery()的方法来执行查询语句DataSetds=newDataSet();sda.Fill(ds,"student");//填充数据集con.Close();//关闭数据库的连接this.GridView1.DataSource=ds;//输出到GridView控件中this.GridView1.DataBind();//将数据绑定到GridView控件中}上一页下一页返回6.2ADO.NET的对象6.2.3DataReader对象ADO.NET有两种访问数据源的方式:一种是使用DataReader逐行地从数据源获得数据放进缓冲区并进行处理;二是使用DataSet对象来将数据放到内存中进行处理。DataSet将在下一节进行介绍。DataReader(即数据阅读器)是用来读取数据库的最简单的方式,它一次读取一条记录,而且这些数据是只读的,并且不允许进行其他的操作,所以使用DataReader可以减少系统的开销,提高程序的性能。上一页下一页返回6.2ADO.NET的对象当使用Command对象的ExecutReader方法时,返回的就是DataReader类型。DataReader对象只能配合Command对象使用,而且DataReader对象在操作的时候与Connection对象是保持联机的状态。DataReader和数据源类型紧密连接,每个.NET框架的数据提供程序实现一个DataReader对象,如System.Data.Oledb命名空上一页下一页返回6.2ADO.NET的对象间中的OleDbDataReader以及System.Data.SqlClient命名空间中的SqlDataReader。DataReader对象的常用属性和方法见表6-7和表6-8。[例6-3]使用DataReader对象显示student表中的记录。(1)在chapter06项目中,新建一个页面6_3.aspx。上一页下一页返回6.2ADO.NET的对象(2)在6_3.aspx.cs中加入“usingSystem.Data.SqlClient;”命名空间,在Page_Load中输入如下代码:protectedvoidPage_Load(objectsender,EventArgse){//创建Connection对象上一页下一页返回6.2ADO.NET的对象SqlConnectionconn=newSqlConnection();//创建数据库连接字符串conn.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";//打开连接conn.Open();//创建Command对象上一页下一页返回6.2ADO.NET的对象SqlCommandcmd=newSqlCommand("select*fromstudent",conn);//从数据库取回数据到DataReaderSqlDataReaderreader=cmd.ExecuteReader();//显示OleDbDataReader对象中的所有数据while(reader.Read()){上一页下一页返回6.2ADO.NET的对象//输出Sid、SName、SSex三个字段的值Response.Write(reader["Sid"]+""+reader["SName"]+""+reader["SSex"]+""+"<BR>");}//关闭DataReaderreader.Close();//关闭连接conn.Close();}上一页下一页返回6.2ADO.NET的对象(3)运行程序,效果如图6-5所示。程序说明:①SqlDataReaderreader=cmd.ExecuteReader();用来创建DataReader对象,创建DataReader对象,需要调用Command对象的ExecuteReader()方法,而不直接使用构造函数,因为DataReader类是一个抽象类,不能显式实例化;上一页下一页返回6.2ADO.NET的对象②在创建DataReader对象后,要将记录中的数据取出来使用,可以使用Read方法,如果DataReader对象成功取出数据,则返回Ture,否则返回False,因此,可以利用While循环来取所有数据;while(reader.Read()){……}上一页下一页返回6.2ADO.NET的对象③“reader.Close();”是关闭DataReader对象,因为DataReader是以独占方式使用Connection对象,所以当读完数据时或不再使用DataReader时,要记住关闭DataReader。上一页下一页返回6.2ADO.NET的对象6.2.4DataSet对象DataSet(即数据集)对象位于System.Data命名空间,可以被看作是一个内存数据库,它由一个或多个数据表(DataTable)、数据表间的关系(Relation)、约束(Constraint)、记录(DataRow)及字段(DataColumn)对象的集合组成。DataSet对象的结构与数据库相似。DataSet对象中的DataTable相当于数据库中的表,DataSet中的数据以上一页下一页返回6.2ADO.NET的对象DataTable形式存储。DataTable对象包含一个列集合(DataColumnCollection)对象,DataColumnCollection对象代表数据表中的各个列。该列集合由多个DataColumn对象组成。DataTable对象包含一个行集合(DataRowCollection)对象,DataRowCollection上一页下一页返回6.2ADO.NET的对象对象含有DataTable中的所有记录。该行集合由多个DataRow对象组成。DataTable中的实际数据由DataRow对象表示,可以修改DataRow对象中的数据,该对象不仅维护数据的原始状态,还维护当前状态。DataSet对象的一个重要特性是离线操作,即从数据库中取回数据,存到DataSet对象中后,程序可以马上断开数据库的连接,用户可以对内存中DataSet对象中的数据进行增加删除、修改,而当需要把改动反映到数据库时,只要重新与数据库建立连接,并利用相应的命令实现更新。上一页下一页返回6.2ADO.NET的对象这意味着程序和数据库的连接时间可以尽可能短,减少对数据库服务器资源的占用,这对于Web应用程序有着重要意义。DataSet对象的常用属性和方法见表6-9和表6-10。[例6-4]使用DataSet对象显示student表中的记录。(1)在chapter06项目中,新建一个页面6_4.aspx。上一页下一页返回6.2ADO.NET的对象(2)在设计视图中拖入一个GridView控件,用于把表中的数据绑定到该控件显示,后面的章节中会详细介绍。(3)在6_4.aspx.cs中加入usingSystem.Data.SqlClient;命名空间,在Page_Load中输入如下代码:protectedvoidPage_Load(objectsender,EventArgse){上一页下一页返回6.2ADO.NET的对象SqlConnectionconn=newSqlConnection();conn.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";//创建DataAdapter对象SqlDataAdapteradapter=newSqlDataAdapter("select*fromstudent",conn);//创建DataSet对象上一页下一页返回6.2ADO.NET的对象DataSetds=newDataSet();//将student表填充到数据集DataSet中adapter.Fill(ds,"student");//数据表student绑定到GridView控件GridView1.DataSource=ds.Tables["student"];//在GridView中显示绑定的数据GridView1.DataBind();}上一页下一页返回6.2ADO.NET的对象(4)运行程序,效果如图6-6所示。程序说明:adapter.Fill(ds,“student”);是利用DataAdapter对象的Fill方法将数据填充到DataSet对象。[例6-5]使用DataTable对象显示student表中Sid、SName、SSex字段的记录。(1)在chapter06项目中,新建一个页面6_5.aspx。上一页下一页返回6.2ADO.NET的对象(2)在设计视图中拖入一个GridView控件。(3)在6_5.aspx.cs中加入usingSystem.Data.SqlClient;命名空间,在Page_Load中输入如下代码:protectedvoidPage_Load(objectsender,EventArgse){SqlConnectionconn=newSqlConnection();上一页下一页返回6.2ADO.NET的对象conn.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";conn.Open();SqlCommandcmd=newSqlCommand("select*fromstudent",conn);//从数据库取回数据到DataReaderSqlDataReaderreader=cmd.ExecuteReader();//定义DataTable对象上一页下一页返回6.2ADO.NET的对象

DataTabledt=newDataTable("student");//定义列dt.Columns.Add("Sid");dt.Columns.Add("SName");dt.Columns.Add("SSex");//把DataReader中的数据赋给DataTablewhile(reader.Read())上一页下一页返回6.2ADO.NET的对象{//创建一个DataRowDataRowrow=dt.NewRow();//为DataRow的各个字段赋值row["Sid"]=reader["Sid"];row["SName"]=reader["SName"];row["SSex"]=reader["SSex"];上一页下一页返回6.2ADO.NET的对象//把DataRow加入到DataTable中dt.Rows.Add(row);}reader.Close();conn.Close();//在GridView中绑定DataTable中的数据上一页下一页返回6.2ADO.NET的对象GridView1.DataSource=dt;GridView1.DataBind();}(4)运行程序,效果如图6-7所示。程序说明:DataTable的NewRow()方法可以产生一个DataRow数据行,但该DataRow并不是DataTable的一部分,还需要使用dt.Rows.Add(row);语句将DataRow加入到DataTable之中。上一页下一页返回6.2ADO.NET的对象6.2.5DataAdapter对象在创建了与数据源的连接后,可能要检索数据并把检索到的数据填充到DataSet中,DataSet对象表示来自数据源的数据的本地副本,在没有数据源时,DataSet对象保存Web窗体可访问的本地数据是很有用的,为了能够和一个或多个数据源进行交互,.NetFrameWork提供了DataAdapter对象。上一页下一页返回6.2ADO.NET的对象DataAdapter(即数据适配器)对象用作DataSet和数据源之间的连接,能够检索和保存数据,DataAdapter类包含一组数据库命令和一个数据库连接,它们用来填充DataSet对象和更新数据源,每个DataAdapter对象都在单个结果集之间交换数据。DataAdapter对象常用属性见表6-11。使用DataAdapter对象在一个DataAdapter对象和一个数据源之间交换数据时,可以使用DataAdapter的四个属性中的某一个指定要执行的操作。DataAdapter对象常用方法见表6-12。上一页下一页返回6.2ADO.NET的对象DataAdapter对象通过Fill方法把数据添加到DataSet中,在对数据完成增加、删除或修改操作后再调用Update方法更新数据源。[例6-6]使用DataSet对象和DataAdapter对象实现数据的增加、删除、修改。(1)在chapter06项目中,新建一个页面6_6.aspx。(2)在设计视图中拖入两个GridView控件。上一页下一页返回6.2ADO.NET的对象(3)在6_6.aspx.cs中加入usingSystem.Data.SqlClient;命名空间,在Page_Load中输入如下代码:protectedvoidPage_Load(objectsender,EventArgse){SqlConnectionconn=newSqlConnection();上一页下一页返回6.2ADO.NET的对象conn.ConnectionString="server=localhost;database=jwgl;integratedsecurity=SSPI;";//创建DataAdapter对象,查询出student表中的数据SqlDataAdapteradapter=newSqlDataAdapter("select*fromstudent",conn);//创建DataSet对象DataSetds=newDataSet();上一页下一页返回6.2ADO.NET的对象adapter.Fill(ds,"student");GridView1.DataSource=ds;GridView1.DataBind();//对DataTable进行增加、删除、修改//插入一行DataRowr1=ds.Tables["student"].NewRow();r1["Sid"]="11111111111";上一页下一页返回6.2ADO.NET的对象r1["SName"]="一";r1["SSex"]="男";ds.Tables["student"].Rows.Add(r1);//修改第二条记录DataRowr2=ds.Tables["student"].Rows[1];//获取表中的第二行对象r2["SName"]="二";上一页下一页返回6.2ADO.NET的对象//删除第一条记录ds.Tables["student"].Rows[0].Delete();//将对数据的改动写回到数据源SqlCommandBuildercb=newSqlCommandBuilder(adapter);adapter.Update(ds,"student");//绑定DataGrid控件显示修改后的数据上一页下一页返回6.2ADO.NET的对象GridView2.DataSource=ds;GridView2.DataBind();}(4)运行程序,效果如图6-8所示。上一页下一页返回6.2ADO.NET的对象程序说明:DataAdapter对象有四个Command属性:SelectCommand、InsertCommand、UpdateCommand及DeleteCommand。可以预先准备好这几个Command,需要时DataAdapter会自动调用。本例中对DataAdapter的几个Command赋值,因为要产生这些Command比较麻烦,系统提供了一个简化的方法,也就是利用CommandBuilder对象自动创建,即语句:SqlCommandBuildercb=newSqlCommandBuilder(adapter);上一页返回6.3

数据访问控件前面介绍了ADO.NET对象编程的方法,这是ASP.NET数据库操作的基础。除此之外,ASP.NET还提供了丰富的Web数据访问控件,包括数据源和数据绑定控件。这些控件屏蔽了大量的数据库操行细节,在不影响功能的同时大大减少了代码的编写量。下一页返回6.3

数据访问控件6.3.1

数据源控件1.数据源控件概述ASP.NET包含了一些数据源(DataSource)控件,这些数据控件不呈现任何用户界面,而是充当不同类型数据源与网页上其他界面控件之间的中间方,这里的数据源是指数据库、XML文件或中间层业务对象等。数据源控件对象可以用声明的方式(在网页文件中)或以编程的方式(在代码隐藏文件中)定义。使用数据源控件可以连接到数据源,而无需编写代码。上一页下一页返回6.3

数据访问控件ASP.NET中的数据源控件有五个,分别是SqlDataSource、AccessDataSource、ObjectDataSource、XmlDataSource和SiteMapDataSource。①SqlDataSource:连接到ADO.NET托管数据提供程序,完成对SQLServer、Oracle、OLEDB或ODBC数据源的访问。上一页下一页返回6.3

数据访问控件②AccessDataSource:连接Access数据库。③ObjectDataSource:连接中间层对象或数据接口对象,使用ObjectDataSource可以创建依赖用于中间层对象来管理数据的Web应用程序。④XmlDataSource:连接XML数据源文件,一般为诸如TreeView或Menu等层次结构控件提供数据。⑤SiteMapDataSource:与ASP.NET站点导航结合使用。上一页下一页返回6.3

数据访问控件以上数据源控件都可以用来从它们各自类型的数据源中检索数据,并且可以绑定到各种数据绑定控件。数据源控件减少了为检索和绑定数据甚至对数据进行排序、分页或编辑而需要编写的自定义代码的数量。每个数据源控件都具有类似的属性,以便可以与其各自的数据源进行交互。生成SiteMapDataSource和XmlDataSource是为了检索分层数据,而生成其他数据源控件是为了检索带有列和行的基于集合的数据。专门生成上一页下一页返回6.3

数据访问控件AccessDataSource以便从Access数据库中检索数据。SqlDataSource看起来好像只能使用SQLServer,但实际情况不是这样的。它实际上可以用来从任何OLEDB或符合ODBC的数据源中检索数据。本书主要介绍SqlDataSource控件。2.SqlDataSource数据源控件SqlDataSource控件使用SQL命令来检索和修改数据,可用于SQLServer、Oracle或任何一个可以通过OLEDB或ODBC访问的数据源。上一页下一页返回6.3

数据访问控件SqlDataSource控件可将检索结果作为DataReader或DataSet对象返回。当结果作为DataSet返回时,还可以对结果进行排序、筛选和缓存等操作。[例6-7]使用SqlDataSource控件连接SQLServer数据库jwgl。(1)在chapter06项目中,新建一个页面sqldatasource1.aspx。上一页下一页返回6.3

数据访问控件2)在工具箱的“数据”栏中拖入一个SqlDataSource控件。在设计视图中,可以看到SqlDataSource控件,单击该控件右上角的“智能标签”,将打开一个菜单,如图6-9所示。在页面的源视图中自动产生如下代码:<asp:SqlDataSourceID="SqlDataSource1"runat="server"></asp:SqlDataSource>上一页下一页返回6.3

数据访问控件(3)选择“配置数据源”,弹出“配置数据源”向导对话框,单击“新建连接”按钮,弹出“选择数据源”对话框,在这里可以选择需要的数据源,此处选择MicrosoftSQLServer选项,单击“继续”按钮,如图6-10所示。(4)在弹出的“添加连接”对话框中,添加一个新的数据库连接,进行如图6-11所示的设置。单击“测试连接”按钮进行测试,如果测试成功,则可单击“确定”按钮返回“配置数据源”向导,单击“下一步”继续。上一页下一页返回6.3

数据访问控件(5)在弹出的“配置数据源”向导对话框中选中“是”复选框,并将文本框的值改为SQLConn,单击“下一步”按钮继续,如图6-12所示。(6)在“配置Select语句”对话框中,选择Student表的所有行所有列,如图6-13所示。单击OROERBY”按钮,为查询命令添加一个ORDERBY子句,如图6-14所示,可以看到生成的SQL语句为“SELECT*FROM[Student]ORDERBY[Sid]”。上一页下一页返回6.3

数据访问控件单击图6-13中的“下一步”按钮继续。(7)在“测试查询”对话框中,单击“测试查询”按钮,若使用的数据库已经建立并且前面的步骤设置正确,则可显示结果记录集,如图6-15所示。(8)单击“完成”按钮,完成数据源的配置。对于数据源中数据的操作将在后面进行介绍。当配置完数据源后,可以在页面的源视图中,看到自动产生的SqlDataSource控件代码:上一页下一页返回6.3

数据访问控件<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ConnectionStrings:SqlConn%>"SelectCommand="SELECT*FROM[Student]ORDERBY[Sid]"></asp:SqlDataSource>并且打开网站中的配置文件Web.Config,可以看到配置好的数据库连接字符串connectionStrings。上一页下一页返回6.3

数据访问控件6.3.2

数据绑定控件——GridView控件配置好数据源控件后,接下来可以使用ASP.NET提供的数据绑定控件来显示和编辑数据源的内容。ASP.NET2.0中有5个数据源控件:GridView、DataList、DetailsView、FormView和Repeator。其中GridView、DataList和Repeater都可以同时显示多条记录,而DetailsView和FormView设计为一次显示一条记录。上一页下一页返回6.3

数据访问控件本书主要介绍DataView、DataList和Repeater三个数据绑定控件。1.GridView控件概述GridView控件是ASP.NET1.1下的DataGrid控件的替代品,它内置了表格呈现样式。GridView控件用来在表中显示数据源的值,其中每列表示一个字段,而每行表示一条记录。GridView控件支持的功能包括:绑定至数据源控件,内置排序、更新、删除、分页及行选择功能,以编程方上一页下一页返回6.3

数据访问控件式访问GridView对象模型,以动态设置属性、处理事件,多个键字段,用于超链接列的多个数据字段,可通过主题和样式进行自定义的外观,可以实现多种样式的数据展示。GridView控件包括许多属性和事件,常用属性和事件见表6-9和表6-10。2.GridView控件的基本应用GridView控件不但可以轻松的显示数据,而且还可以插入、修改和删除数据。上一页下一页返回6.3

数据访问控件[例6-8]使用GridView控件显示记录。(1)打开[例6-7]中的sqldatasource1.aspx页面,使用其中配置好的SqlDataSource数据源。(2)在工具箱的“数据”栏中拖入一个GridView控件到设计窗口中。单击其右上角的“智能标签”,从弹出菜单的“选择数据源”中选择SqlDataSource1,可以看到设计视图中的GridView控件外观发生了变化,这是因为Student表的各字段绑定到了列。上一页下一页返回6.3

数据访问控件(3)运行程序,显示效果如图6-16所示。程序说明:GridView控件是以表格的形式显示数据的。默认情况下,GridView控件一次性显示数据源中的所有数据。表格中包含一个表头,一般情况下,表头显示的是各字段的名称,可以通过修改页面源视图中各字段的HearderText属性,来改变显示时的字段名称。上一页下一页返回6.3

数据访问控件[例6-9]使用GridView控件编辑和删除数据。(1)在[例6-8]的基础上,继续进行设置。打开sqldatasource1.aspx页面。(2)目前的数据源SqlDataSource控件只支持显示数据的功能,不支持修改数据,可进一步对它进行配置。单击SqlDataSource1的智能标签,选择“配置数据源”,弹出“配置数据源”向导对话框,单击“下一步”按钮,弹出上一页下一页返回6.3

数据访问控件“配置Select语句”对话框,单击“高级”按钮,弹出如图6-17所示对话框。选中“生成INSERT、UPDATE和DELETE语句”复选框,可以使数据源不但支持查询,而且支持添加、修改和删除操作;选中“使用开放式并发”复选框,可以防止多用户操作数据源时产生冲突。完成对SqlDataSource1数据源的配置后,在源视图中可以看到其源代码已经发生了改变,主要是增加了上一页下一页返回6.3

数据访问控件DeleteCommand、InsertCommand和UpdateCommand三条命令,并给出了各命令的参数配置。(3)单击GridView控件右上角的“智能标签”,选中“启用编辑”和“启用删除”复选框,可以出现“编辑”和“删除”的链接文字,如图6-18所示。运行程序,可以实现编辑和删除数据。上一页下一页返回6.3

数据访问控件(4)可以将编辑和删除操作改为按钮方式。单击GridView控件右上角的“智能标签”,从弹出的菜单中选择“编辑列”命令,弹出“字段”对话框,单击“选定的字段”中的CommandField,在右侧的属性列表中,将ShowDeleteButton、ShowEditButton属性改为True,将ButtonType属性改为Button。(5)运行程序,显示效果如图6-19

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论