1、任务5.1 ADO.NET概述 Web数据库采用三层或多层体系结构,前端采用浏览器数据库采用三层或多层体系结构,前端采用浏览器技术,通过技术,通过Web服务器和中间件访问数据库,如图:服务器和中间件访问数据库,如图:2024-7-61 Internet 浏览器 Web 服务器 HTML HTML 数据库 SQL 结果 CGI 接口 ISAPI JDBC HTML 文档 ADO对象模型.NET数据提供程序数据提供程序DataSet数据库数据库DataTableDataRelationDataReaderDataAdapterCommandConnectionDataColumnDataColum
2、nDataRow可编程性可编程性互操作性互操作性 利用XML实现组件与层之间的数据传输,使任何有能力阅读XML的组件都可以处理数据。ADO.NET的数据模型完全类型化,在程序设计中,开发人员可以像使用类一样声明、定义、使用数据对象。例如:If TotalQty DataSet1.ProductInfo(“BabyFood”).QtyAvaliableADO.NET的主要特性的主要特性ADO.NET简介处理多表之间的关系处理多表之间的关系ADO只能通过只能通过SQL的的JOIN查询来连接多表构成一张独立的表格查询来连接多表构成一张独立的表格ADO.NET提供提供DataRelation对象合并来
3、自多个对象合并来自多个DataTable对象的数据。对象的数据。内存中数据的表现形式内存中数据的表现形式ADO使用Recordset,类似一个单独的表ADO.NET使用DataSet对象,包括一个或多个表ADO.NET与ADO的比较断开连接的访问断开连接的访问可编程性可编程性数据导航数据导航ADO只能只能顺序扫描顺序扫描各行各行ADO.NET允许非顺允许非顺序访问数序访问数据表据表通过DataSet,ADO.NET支持断开连接的访问。ADO.NET的的数据模型完数据模型完全类型化。全类型化。ADO.NET与ADO的比较在层与组件之间共享在层与组件之间共享通过防火墙传输数据通过防火墙传输数据AD
4、O使用使用COM组件传输数据,在各层之间需要进行数据类型组件传输数据,在各层之间需要进行数据类型转换,这需要消耗系统资源。转换,这需要消耗系统资源。ADO.NET使用使用XML传输数据,因此在各层之间进行数据传输传输数据,因此在各层之间进行数据传输无需进行数据类型转换。无需进行数据类型转换。ADO由于使用由于使用COM组件传输数据,而组件传输数据,而COM组件可能会组件可能会受到防火墙阻隔受到防火墙阻隔ADO.NET采用采用XML传输数据,因此不存在此问题传输数据,因此不存在此问题ADO.NET与ADO的比较 ADO.NET与ADO的比较uADO需要长时间锁定数据库和保持数据连接,占用有限的数
5、据库系统连接uADO.NET允许在断开连接的状态下访问数据库,而不用长时间保持数据库连接2024-7-67可伸缩性可伸缩性1.Connection对象对象2.Command对象对象3.DataReader对象对象4.DataAdapter对象对象5.DataSet对象对象6.DataTable对象对象7.DataView对象对象Connection对象主要是创建应用程序与数据库之间的连接。对于连接不同的数据源需要使用不同的类。若要连接到Microsoft SQL Server 7.0以上版本,则选择SqlConnection对象;如果连接的数据源是OLE DB 或 Microsoft SQL
6、Server 6.x或以前的版本,则选择OleDbConnection对象。基本概念基本概念Connection对象Data Source、Server、Address、Addr或或Network Address2Initial catalog或或 database3Integrated security 或或trusted_connection4User ID5Connect Timeout或或Connection Timeout1ConnectionString 属性属性Password 或或pwd6Connection对象也可以使用连接字符串来创建链接,如下:Sqlconnection
7、Conn=new Sqlconnection();Conn.ConnectionString=“server=(local);database=BMS;Integrated security=yes”;在建立数据库连接的过程中,即可以在ConnectionString的属性中指定连接字符串,也可以在类的构造函数中指定。如:String ConnectString=“server=(local)database=BMS;Integrated security=yes”;Sqlconnection Conn=new Sqlconnection(ConnectString);连接名为mySqlSer
8、ver服务器中的pubs数据库,登录账户为sa,登录密码为sa,连接超时的设定为20s,使用windows集成安全身份验证:Data Sourc=mySqlServer;Initial Catalog=pubs;User ID=sa;Password=sa;Connect Timeout=20;Integrated security=SSPIConnection对象Command对象 1.Command对象的基本属性属性名 功能说明 Connection 获取或设置用于执行命令的Connection对象,在执行命令时,连接必须打开,否则就会抛出异常 CommandText获取或设置要执行的命令
9、,可以是表名称,T-SQL代码或存储过程CommandType设置命令的类型,可以是以下3种Text:默认值,说明CommandText中的值是T-SQL代码TableDirect:CommandText中的值是表名,返回该表种所有的数据StoredProcedure:指定要执行的存储过程名称CommandTimeout确定声明执行的命令超时前SqlCommand类的等待时间。如果发生超时,命令就会中止并抛出一个异常。2.Command对象的基本方法及运用Command对象 ExecuteNonQueryExecuteNonQuery方法是在.NET Framework 2.0中新增的。可以使
10、用ExecuteNonQuery执行目录操作命令(如查询自己的数据库的结构或创建表等),也可以通过执行Update、Insert或Delete语句更改数据库中的数据。该方法执行Update、Insert或Delete命令时不返回任何行,只返回执行命令所影响到表的行数。对于其他类型的语句,返回值为-1。ExecuteScalarExecuteScalar方法也是在.NET Framework 2.0中新增的。ExecuteScalar方法执行查询,返回查询结果集中的第一行第一列,所有其他的行和列将被忽略。ExecuteReader如果需要使用Command对象来返回多行结果数据,可以使用Exec
11、uteReader方法。DataReader对象 基本概念基本概念DataReader对象用来定义如何根据连接读取数据。在创建Command对象实例后,调用Command对象的ExecuteReader()方法来检索数据,并使用一个DataReader对象来接受返回的数据行。1DataReader只能读取数据。不能对记录进行数据的编辑、添加和删除。2DataReader只能在记录间“向前”移动,一旦移动到“下一条”记录,就不能再回到前一条记录,除非在执行一遍所有的SQL查询。3DataReader不能在IIS内存中存储数据,数据直接在显示对象上显示。4DataReader是工作在连接模式下的,
12、也就是应用程序在读取DataReader中的数据时,到数据库的连接必须处于打开状态。DataReader对象3、DataReader对象的基本属性 DataReader对象4、DataReader对象的基本方法及运用(1)Read通过调用Read()方法,可以判断DataReader对象表示的是查询结果集中某一行记录。在调用Read()方法时,如果可以使DataReader对象所表示的当前数据行向前移动一行,那么它将返回true。如果读取的是查询结果集中的最后一条记录,调用Read()方法返回false。(2)GetValues该方法一般用来将当前数据行的数据保存到一个数组中,可以根据应用的需
13、求来设置数组的大小。如果要保存所有的数据,可以使用DataReader.FieldCount属性得到当前行中的列数。作为数组容量大小。(3)Close在每次使用完DataReader对象后都要用Close将其关闭。DataAdapter对象 1、创建DataAdapter对象 2、DataAdapter对象的属性p SelectCommand:用于在数据库中执行查询操作的命令。p InsertCommand:用于向数据源中添加新记录或存储过程的命令。p UpdateCommand:用于更新数据集中的记录。p DeleteCommand:用于从数据集中删除记录。DataSet对象 1、DataS
14、et和DataReader对象的区别 DataSet对象2、创建、创建DataSet 创建DataSet对象最直接的方法是调用DataSet类的构造函数。创建的时候,用户可以自定义可选的参数作为DataSet的名称,也可以不指定,这时,DataSet会使用NewDataSet作为其名称。例如:DataSet myDS=new DataSet(myDS);DataSet myDS2=myDS;3、填充、填充DataSet创建DataSet之后,需要把数据导入到DataSet中。通常使用DataAdapter取出数据,然后调用DataAdapter的Fill方法,将取出的数据导入到DataSet中
15、。DataTable对象 DataTable对象概述DataTable对象用于表示内存中的数据库表,既可以独对象用于表示内存中的数据库表,既可以独立创建和使用,也可以被其他对象创建和使用。在通立创建和使用,也可以被其他对象创建和使用。在通常情况下,常情况下,DataTable对象都作为对象都作为DataSet对象的成员对象的成员存在,可以通过存在,可以通过DataSet对象的对象的Tables属性来访问属性来访问DataSet对象中的对象中的DataTable对象。对象。DataTable对象u 创建DataTable对象 通过Datatable类的构造函数来创建,在构造函数中可以指定其名称,
16、DataTable studentTable=new DataTable(student);通过DataSet对象的Tables属性的Add方法来创建例如:ds.Tables.Add(dt);通过DataAdapter对象的Fill方法或FillSchema方法在DataSet对象内创建。da.Fill(objDataSet,objDataTable);u 在DataTable中添加列 DataTable对象中有一个Columns属性,是DataColumn对象的集合,每个DataColumn对象表示表中的一个列。因此,要添加一个列,就需要创建一个DataColumn对象。u 设置DataTa
17、ble的主键 主键用来唯一标识表中的每一行记录,主键可能是一个列或几个列的组合。通过设置DataTable对象的PrimaryKey属性可以设置DataTable的主键。DataTable对象u 在DataTable中添加行 为表添加新行,即创建DataRow对象,可以调用DataTable对象的NewRow方法实现。u 定义DataTable之间的关系 在DataTable之间定义关系就是创建一个DataRelation对象,使一个表与另一个表的相关。DataRelation对象关键的参数是DataRelation名称和在两个表之间引起相关的列(DataColumn)。u 把DataTabl
18、e添加DataSet中 将其一个DataTable添加DataSet中,其关键代码如下:ds.Tables.Add(dt);DataView对象 DataView对象可以创建DataTable中所有存储数据的视图与关系数据库提供的视图相似 DataView提供了数据的动态视图可以实现对表中数据进行筛选排序的功能,因此 DataView是数据绑定应用程序的理想选择。DataView对象概述用于对DataView所表示的数据行进行过滤。用于对DataView所表示的数据行进行排序用于对DataView所表示的数据行依照状态进行排序。SortRowFilterRowStateFliter1DataV
19、iew对象的属性DataView对象常见的数据库操作 l 创建数据库连l 读取数据库记录l 添加数据库记录l 更新数据库记录l 删除数据库记录l 调用存储过程创建数据库连接 l 连接SQL Server数据源sqlConnection Conn=new SqlConnerction(Data source=localhost;Integrated Security=SSPI;Initial Catalog=student);Conn.Open();l 连接OLE DB数据源oleDbConnection Conn=new OleDbConnection(Provider=SQLOLEDB;Da
20、taSource=localhost;Integrated Security=SSPI;Initial Catalog=student);Conn.Open();l 连接ODBC数据源odbcConnection Conn=new OdbcConnection(Driver=SQL Server;server=(local);Trusted_Connection=Yes;Database=student);Conn.Open();l 连接Oracle数据库OracleConnection Conn=new OracleConnection(Data Source=localhost;Integ
21、rated Security=yes)Conn.Open();读取数据库记录 v从数据库查询数据一般有两种方式:一是通过DataReader对象直接访问;二是通过DataSet对象和DataAdapter对象来访问。v 使用ADO.NET的DataReader对象可以从数据库中检索数据,检索出来的数据形成一个只读,只进数据流,并存储在客户端的网络缓冲区中。DataReader对象的Read()方法可以使当前数据行向前移动一步。在默认情况下,Read()方法一次只在内存中存储一行,因此对系统的开销很小。添加数据库记录 pSQL Insert语句 SQL中使用中使用Insert语句向数据库表中写入
22、信息。语句向数据库表中写入信息。Insert语句的语法如下:语句的语法如下:Insert Into 数据表(字段数据表(字段1,字段,字段2,)Values(值(值1,值,值2,)p主键与外键无论何时将新记录插入数据库,都应当考虑数据表的主键和外键约束问题。无论何时将新记录插入数据库,都应当考虑数据表的主键和外键约束问题。主键是数据表中能惟一的。任何试图插入一条现有记录副本的操作都会产生主键是数据表中能惟一的。任何试图插入一条现有记录副本的操作都会产生错误。因此,当插入新记录时,必须确保提供的记录具有合法并且惟一的主错误。因此,当插入新记录时,必须确保提供的记录具有合法并且惟一的主键。键。外键
23、指的是表外键指的是表A A中的某一字段,在该表中不是主键,或是作为主键字段集合的中的某一字段,在该表中不是主键,或是作为主键字段集合的一部分,但该字段在表一部分,但该字段在表B B中是主键,那么这个字段在表中是主键,那么这个字段在表A A中称为外键。中称为外键。添加数据库记录p 强制性字段强制性字段 向数据库插入记录还涉及到强制性字段的问题,即用户必须向数据库的列提供值,在Access中称之为“必填字段”。主键字段通常是强制性的,但是其他的字段也可以是强制性的。p 使用Command 对象添加数据库记录p 使用ASP.NET数据验证控件验证数据的合法性 只要允许用户在表单中输入数据,就会增加将
24、错误引入数据库的危险性。例如:某字段是强制性字段,但是用户没有为该字段在表单中输入数据;某字段的数据类型是数值型,但是用户为该字段在表单中输入了一个字符串诸如此类,都将引发错误。解决这个问题的方法是使用ASP.NET数据验证控件对表单中的输入控件进行检查,以验证数据的合法性。更新数据库记录 SQL Update语句 SQL中使用Update语句可以修改指定表中满足某些条件的记录。Update语句的语法如下:Update 数据表名 Set 字段1=值1,字段2=值2,Where 条件表达式 使用Command 对象更新数据库记录 使用GridView控件编辑和更新记录删除数据库记录 l SQL
25、Delete语句 SQL中使用Delete语句来删除一条或者多条现有的记录,每次只能够对一个表进行删除操作。DELETE语句的语法为:Delete From 数据表名 Where 条件表达式 l 使用Command 对象删除数据库记录l 使用GridView控件删除数据库记录调用存储过程 u存储过程概述 存储过程是一组完成特定功能的T-SQL语句集。经编译后存储在数据库中。可以使用T-SQL中的EXECUTE语句来运行存储过程。u存储过程具有以下一些优点n 存储过程允许模块化程序设计。存储过程一旦创建,可在程序中调用任意次数。这样可改进应用程序的可维护性,并允许应用程序统一访问库。n 存储过程
26、能够实行较快的执行速度,存储过程是预编译的,当某一个操作包含大量的T-SQL代码或分别执行多次,则是使用存储过程比直接使用单条SQL语句执行速度快得多。n 存储过程能提高应用程序的通用性和可移植性。存储过程在创建后,可以在程序中被多次调用,而不必重新编写该存储过程SQL语句。用户还可以对存储过程随时进行修改,这对应用程序没有影响。n 存储过程可以有效地管理用户操作的权限,在SQL Server中,系统管理员可以设定只有某些用户具有对指定存储过程的使用权。调用存储过程u创建存储过程 在SQL中,使用CREATE Procedure来创建存储过程,基本语法如下:CREATE Procedure 存
27、储过程名参数名 数据类型 AS 要执行的SQL命令u调用存储过程 在ADO.NET中调用存储过程其实跟执行SQL命令差不多,都是通过Command 对象来执行数据库操作。不同的是,在调用存储过程中,必须指明Command 对象要调用的是存储过程,而不是命令文本,同时指明要调用的存储过程名称以及关联的连接对象名称。基本语法如下:Command 对象.Connection=连接对象名Command 对象.CommandText=存储过程名Command 对象.CommandType=CommandType.StoreProcedureRepeater控件控件DataList控件控件DataGrid
28、控件控件GridView控件控件常用控件的数据绑定 Repeater控件 1、Repeater控件基本模板介绍v HeaderTemplate和FooterTemplate模板分别在Repeater控件的开始和结束处呈现文件和控件;v ItemTemplate模板为Repeater控件的普通项,它重复的次数和数据源中的数据项的数量相同;v AlternatingItemTemplate模板为Repeater控件的交替项,它一般和普通项(ItemTemplate)交替呈现数据;v SeparatorTemplate模板为Repeater控件的分隔项,它可以为该控件的各个项提供分隔元素,最典型的元
29、素就是hr元素。2使用Repeater控件显示记录 DataList控件 1.DataList控件基本模板介绍vHeaderTemplate和和FooterTemplate模板分别呈现控件的标模板分别呈现控件的标题部分和脚注部分,即分别在控件开始和结束处呈现文本和控件;题部分和脚注部分,即分别在控件开始和结束处呈现文本和控件;vItemTemplate模板呈现控件的普通项,它往往和模板呈现控件的普通项,它往往和AlternatingItemTemplate模板交替呈现数据或控件;模板交替呈现数据或控件;vSelectedItemTemplate模板呈现控件中被选择项的数据或控件,模板呈现控件中
30、被选择项的数据或控件,当控件处于编辑状态时;当控件处于编辑状态时;vEditItemTemplate模板呈现编辑项的数据或控件;模板呈现编辑项的数据或控件;vSeparatorTemplate模板为各项间分隔符的模板,往往用来呈现模板为各项间分隔符的模板,往往用来呈现项之间的元素。项之间的元素。2.使用DataList控件显示记录DataGrid控件 在DataGrid控件中显示数据 DataGrid控件以表格的形式显示数据,通过编辑DataGrid控件的属性可以实现对其中显示的数据进行选择、编辑、更新以及添加排序、分页等功能。在DataGrid控件中创建列 在DataGrid控件中可以使用“属性生成器”向控件中添加列。对DataGrid控件中的记录进行分页 DataGrid控件的一个突出功能就是支持记录的分页显示。使用DataGrid控件显示记录 GridView控件 GridView控件是DataGrid控件的后续控件。它可以显示、编辑和删除多种不同的数据源中的数据。这些数据源可以是数据库、XML文件、公开数据的业务对象等。GridView控件概述GridView控件1、GridView控件的基本属性GridView控件2 GridView控件的数据操作编辑数据编辑数据排序数据排序数据数据分页数据分页