




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第8章章 ADO.NET数据数据库库访问技术访问技术 内容vADO.NET基础基础 v连接模式数据库访问连接模式数据库访问 v断开模式数据库访问断开模式数据库访问 8.1 ADO.NET基础基础vADO.NET模型模型vADO.NET的组件的组件 vADO.NET的数据访问模式的数据访问模式 8.1.1 ADO.NET模型模型8.1.2 ADO.NET的组件的组件v数据集数据集DataSet位于位于System.Data命名空间下,用于在命名空间下,用于在内存中暂存数据,可以把它看成是内存中的小型数据库。内存中暂存数据,可以把它看成是内存中的小型数据库。DataSet包含一个或多个数据表(包
2、含一个或多个数据表(DataTable),表数),表数据可来自数据库、文件或据可来自数据库、文件或XML数据。数据。 vDataSet一旦读取到数据库中的数据后,就在内存中建一旦读取到数据库中的数据后,就在内存中建立数据库的副本,在此之后的所有操作都是在内存中的立数据库的副本,在此之后的所有操作都是在内存中的DataSet中完成,直到执行更新命令为止。中完成,直到执行更新命令为止。 v在在ADO.NET中,连接数据源有中,连接数据源有4种数据提供程序。种数据提供程序。如果要在应用程序中使用任何一种数据提供程序,如果要在应用程序中使用任何一种数据提供程序,必须在后台代码中引用对应的命名空间,类的
3、名称必须在后台代码中引用对应的命名空间,类的名称也随之变化。也随之变化。 8.1.3 ADO.NET的数据访问模式的数据访问模式8.2 连接模式数据库访问连接模式数据库访问v使用使用SqlConnection对象连接数据库对象连接数据库 v使用使用SqlCommand对象执行数据库命令对象执行数据库命令 v使用使用SqlDataReader读取数据读取数据 v为为SqlCommand传递参数传递参数 v使用使用SqlCommand执行存储过程执行存储过程v使用事务处理使用事务处理 连接模式访问数据库的开发流程有以下几个步骤:连接模式访问数据库的开发流程有以下几个步骤:v创建创建SqlConne
4、ction对象与数据库建立连接;对象与数据库建立连接;v创建创建SqlCommand对象对数据库执行对象对数据库执行SQL命令或命令或存储过程,包括增、删、改及查询数据库等命令;存储过程,包括增、删、改及查询数据库等命令;v如果查询数据库的数据,则创建如果查询数据库的数据,则创建SqlDataReader对对象读取象读取SqlCommand命令查询到的结果集,并将查命令查询到的结果集,并将查到的结果集绑定到控件上。到的结果集绑定到控件上。8.2.1 使用使用SqlConnection对象连接对象连接数据库数据库1示例数据库的创建示例数据库的创建 创建一个示例数据库创建一个示例数据库Studen
5、t,该数据库包含,该数据库包含StuInfo、Major和和UserInfo三张表,数据库三张表,数据库表结构关系图。表结构关系图。【例【例8-1】演示如何在】演示如何在Visual Studio 2010开发环境开发环境下创建数据库。下创建数据库。 参见示例参见示例第第08章章SqlServerDemoStudent.mdf 2创建数据库连接创建数据库连接操作数据库的第一步是建立与数据库的连接,因此首操作数据库的第一步是建立与数据库的连接,因此首先要创建先要创建SqlConnection对象。要创建对象。要创建SqlConnection对对象必须先了解象必须先了解SqlConnection对
6、象的常用属性和方法。对象的常用属性和方法。SqlConnection对象的常用属性对象的常用属性vConnectionString属性通常包含以下参数,各参数属性通常包含以下参数,各参数间用间用“;”分隔。分隔。Provider:用于设置数据源的:用于设置数据源的OLE DB驱动程序。驱动程序。如:如:Access为为“Microsoft.Jet.OLEDB.4.0”;SQL Server 6.5或之前版本为或之前版本为“SQLOLEDB”。Data Source:设置数据源的实际路径。:设置数据源的实际路径。Password:设置登录数据库所使用的密码。:设置登录数据库所使用的密码。User
7、 ID:设置登录数据库时所使用的帐号:设置登录数据库时所使用的帐号。例如,连接例如,连接Access数据库的的连接参数为:数据库的的连接参数为:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:abc.mdbv对于对于SQL7.0或更高版本的或更高版本的SQL数据库,数据库,ConnectionString属性包含的主要参数有:属性包含的主要参数有:Data Source或或Server:设置需连接的数据库服务器名称。:设置需连接的数据库服务器名称。Initial Catalog或或Database:设置连接的数据库名称。:设置连接的数据库名称。At
8、tachDBFilename:数据库的路径和文件名。:数据库的路径和文件名。User ID 或或 uid:登录:登录SQL Server数据库的账户。数据库的账户。Password 或或 pwd:登录:登录SQL Server数据库的密码。数据库的密码。Integrated Security:是否使用:是否使用Windows集成身份验证,集成身份验证,值有三种:值有三种:true、false和和SSPI,true和和SSPI表示使用表示使用Windows集成身份验证。集成身份验证。Connection Timeout:设置:设置SqlConnection对象连接对象连接SQL数据库服务器的超时
9、时间,单位为秒,若在所设置的时间内数据库服务器的超时时间,单位为秒,若在所设置的时间内无法连接数据库,则返回失败信息。默认为无法连接数据库,则返回失败信息。默认为15秒。秒。v连接数据库时,有两种验证模式:连接数据库时,有两种验证模式:混合验证模式混合验证模式Windows集成验证模式集成验证模式v使用混合验证模式的连接参数为:使用混合验证模式的连接参数为:Data Source =localhost; Initial Catalog=northwind; User Id=sa;pwd=123其中,其中,Data Source =localhost表示连接本机表示连接本机SQL数数据库的默认服
10、务器。据库的默认服务器。v使用使用Windows集成验证模式的连接参数为:集成验证模式的连接参数为: Data Source =localhost; Initial Catalog=northwind; Integrated Security=truev混合验证模式必须在连接字符串中以明文形式保存混合验证模式必须在连接字符串中以明文形式保存用户名和密码,因此安全性较差。用户名和密码,因此安全性较差。Windows集成验集成验证模式不发送用户名和密码;仅发送用户通过身份证模式不发送用户名和密码;仅发送用户通过身份验证的信息。从安全角度考虑,建议使用验证的信息。从安全角度考虑,建议使用Window
11、s集成验证模式。集成验证模式。v在本书的示例中,数据库都是放在网站的在本书的示例中,数据库都是放在网站的App_Data目录下。如例【目录下。如例【8-1】中创建的】中创建的Student数据库的连接参数应设置为:数据库的连接参数应设置为:Data Source=.SQLEXPRESS; AttachDbFilename=|DataDirectory|Student.mdf;Integrated Security=True;User Instance=Truev其中,其中,Data Source=.SQLEXPRESS表示表示SQL Server2005的的SQLEXPRESS数据库服务器,数
12、据库服务器,AttachDbFilename表示数据库的路径和文件名,表示数据库的路径和文件名,|DataDirectory|表示网站默认数据库路径表示网站默认数据库路径App_Data。SqlConnection对象的常用方法对象的常用方法v在创建数据库连接对象时,需要指定连接字符串。通常在创建数据库连接对象时,需要指定连接字符串。通常有以下有以下2种方法获取连接字符串:种方法获取连接字符串:创建连接对象,并在应用程序的中硬编码连接字符创建连接对象,并在应用程序的中硬编码连接字符串。串。SqlConnection 对象名称对象名称 = new SqlConnection(连接连接字符串字符串
13、);或或SqlConnection 对象名称对象名称 = new SqlConnection( );对象名称对象名称. ConnectionString=连接字符串连接字符串;v把连接字符串放在应用程序的把连接字符串放在应用程序的web.config文件中,文件中,再引用再引用web.config文件。文件。在在web.config配置文件的配置文件的节中节中添加如下的代码。添加如下的代码。 vweb.config文件中有了连接字符串后,就可以从文件中有了连接字符串后,就可以从web.config中读取连接字符串。需要使用中读取连接字符串。需要使用System.Configuration.Co
14、nfigurationManager类类读取连接字符串。代码如下:读取连接字符串。代码如下:string strCnn= ConfigurationManager.ConnectionStringsStudentCnnString.ConnectionString;/读取连接字符串读取连接字符串SqlConnection cnn = new SqlConnection(strCnn);/定义连接对象定义连接对象为了使上述代码正常工作,必须使用为了使上述代码正常工作,必须使用using System.Configuration语句引入命名空间。语句引入命名空间。v创建好创建好SqlConnect
15、ion连接对象后,并没有与数据连接对象后,并没有与数据库建立连接,要建立数据库连接,还必须使用库建立连接,要建立数据库连接,还必须使用cnn.Open()方法打开数据连接,然后才可以对数据方法打开数据连接,然后才可以对数据库进行各种操作。操作完数据库后,一定要使用库进行各种操作。操作完数据库后,一定要使用cnn.Close()方法关闭连接。方法关闭连接。.【例【例8-2】演示如何建立】演示如何建立Student数据库的连接。数据库的连接。参见示例参见示例第第08章章SqlServerDemoConnectionDemo.aspx 8.2.2 使用使用SqlCommand对象执行数对象执行数据库
16、命令据库命令v成功连接数据库后,接着就可以使用成功连接数据库后,接着就可以使用SqlCommand对象对数据库进行各种操作,如读取、写入、修改对象对数据库进行各种操作,如读取、写入、修改和删除等操作。和删除等操作。SqlCommand对象的常用属性对象的常用属性v建立建立SqlCommand对象的方法有对象的方法有4种:种:SqlCommand 对象名对象名 = new SqlCommand();SqlCommand 对象名对象名 = new SqlCommand(SQL命令命令);SqlCommand 对象名对象名= new SqlCommand(SQL命令命令 , 连接对象连接对象);Sq
17、lCommand 对象名对象名= new SqlCommand(SQL命令命令 , 连接对象连接对象 , 事务对象事务对象);SqlCommand对象的常用方法对象的常用方法1.ExecuteNonQuery方法方法ExecuteNonQuery方法只能执行方法只能执行Insert、Update和和Delete命令,因此可以增加、修改和删除数据库中的命令,因此可以增加、修改和删除数据库中的数据。增加、修改和删除数据库中的数据的步骤相同,数据。增加、修改和删除数据库中的数据的步骤相同,具体描述如下:具体描述如下:创建创建SqlConnection对象,设置连接字符串;对象,设置连接字符串;创建创
18、建SqlCommand对象,设置它的对象,设置它的Connection和和CommandText属性,分别表示数据库连接和属性,分别表示数据库连接和需要执行的需要执行的SQL命令。命令。打开与数据库连接;打开与数据库连接;使用使用SqlCommand对象的对象的ExecuteNonQuery方法执行方法执行CommandText中的命令;并根据中的命令;并根据返回返回值判断是否对数据库操作成功。值判断是否对数据库操作成功。 关闭与数据库连接;关闭与数据库连接;【例【例8-3】演示如何使用】演示如何使用ExecuteNonQuery方法增加方法增加Student数据库中数据库中UserInfo表
19、的用户信息。表的用户信息。参见示例参见示例第第08章章SqlServerDemoCommand_InsertDemo.aspx 【例【例8-4】演示如何使用】演示如何使用ExecuteNonQuery方法修改方法修改Student数据库中数据库中UserInfo表的用户信息。表的用户信息。参见示例参见示例第第08章章SqlServerDemoCommand_UpdateDemo.aspx 【例【例8-5】演示如何使用】演示如何使用ExecuteNonQuery方法删除方法删除Student数据库中数据库中UserInfo表的用户信息。表的用户信息。参见示例参见示例第第08章章SqlServer
20、DemoCommand_DeleteDemo.aspx 2. ExecuteScalar方法方法vExecuteScalar方法一般用来执行查询单值的方法一般用来执行查询单值的Select命令,它以命令,它以object类型返回结果表第一行类型返回结果表第一行第一列的值。对数据库操作时,具体步骤如下:第一列的值。对数据库操作时,具体步骤如下:创建创建SqlConnection对象,设置连接字符串;对象,设置连接字符串;创建创建SqlCommand对象,设置它的对象,设置它的Connection和和CommandText属性;属性;打开与数据库连接;打开与数据库连接;使用使用SqlCommand
21、对象的对象的ExecuteScalar方法方法执行执行CommandText中的命令;并返回结果表中的命令;并返回结果表第一行第一列的值供应用程序使用第一行第一列的值供应用程序使用。关闭与数据库连接;关闭与数据库连接;【例【例8-6】演示如何使用】演示如何使用ExecuteScalar方法查询方法查询Student数据库中数据库中StuInfo表的学生人数。表的学生人数。参见示例参见示例第第08章章SqlServerDemoCommand_ExecuteScalar.aspx 8.2.3 使用使用SqlDataReader读取数据读取数据vSqlDataReader对象是一个向前只读的记录指针
22、,用对象是一个向前只读的记录指针,用于快速读取数据。对于只需要顺序显示数据表中记录于快速读取数据。对于只需要顺序显示数据表中记录的应用而言,的应用而言,SqlDataReader对象是比较理想的选择。对象是比较理想的选择。v在读取数据时,它需要与数据源保持实时连接,以循在读取数据时,它需要与数据源保持实时连接,以循环的方式读取结果集中的数据。这个对象不能直接实环的方式读取结果集中的数据。这个对象不能直接实例化,而必须调用例化,而必须调用SqlCommand对象的对象的ExecuteReader方法才能创建有效的方法才能创建有效的SqlDataReader对象。对象。SqlDataReader对
23、象一旦创建,即可通过对象对象一旦创建,即可通过对象的属性、方法访问数据源中的数据。的属性、方法访问数据源中的数据。vSqlDataReader对象的常用属性:对象的常用属性:FieldCount:获取由:获取由SqlDataReader得到的一行得到的一行数据中的字段数。数据中的字段数。isClosed:获取:获取SqlDataReader对象的状态。对象的状态。true表示关闭,表示关闭,false表示打开。表示打开。HasRows:表示:表示SqlDataReader是否包含数据。是否包含数据。SqlDataReader对象的常用方法:对象的常用方法:Close()方法:不带参数,无返回值
24、,用来关闭方法:不带参数,无返回值,用来关闭SqlDataReader对象。对象。Read()方法:让记录指针指向本结果集中的下一条记录,返回值是方法:让记录指针指向本结果集中的下一条记录,返回值是true或或false。NextResult()方法:当返回多个结果集时,使用该方法让记录指针指向方法:当返回多个结果集时,使用该方法让记录指针指向下一个结果集。当调用该方法获得下一个结果集后,依然要用下一个结果集。当调用该方法获得下一个结果集后,依然要用Read方法方法来遍历访问该结果集。来遍历访问该结果集。GetValue(int i)方法:根据传入的列的索引值,返回当前记录行里指定方法:根据传
25、入的列的索引值,返回当前记录行里指定列的值。由于事先无法预知返回列的数据类型,所以该方法使用列的值。由于事先无法预知返回列的数据类型,所以该方法使用Object类型来接收返回数据。类型来接收返回数据。GetValues (Object values)方法:该方法会把当前记录行里所有的数方法:该方法会把当前记录行里所有的数据保存到一个数组里。可以使用据保存到一个数组里。可以使用FieldCount属性来获知记录里字段的总属性来获知记录里字段的总数,据此定义接收返回值的数组长度。数,据此定义接收返回值的数组长度。GetDataTypeName(int i)方法:通过输入列索引,获得该列的类型。方法
26、:通过输入列索引,获得该列的类型。GetName(int i)方法:通过输入列索引,获得该列的名称。综合使用方法:通过输入列索引,获得该列的名称。综合使用GetName和和GetValue两方法,可以获得数据表里列名和列的字段。两方法,可以获得数据表里列名和列的字段。IsDBNull(int i)方法:判断指定索引号的列的值是否为空,返回方法:判断指定索引号的列的值是否为空,返回True或或False。v使用使用SqlDataReader对象查询数据库的一般步骤:对象查询数据库的一般步骤:创建创建SqlConnection对象,设置连接字符串;对象,设置连接字符串;创建创建SqlCommand
27、对象,设置它的对象,设置它的Connection和和CommandText属性,分别表示数据库连接和需要执行属性,分别表示数据库连接和需要执行的的SQL命令。命令。打开与数据库连接;打开与数据库连接;使用使用SqlCommand对象的对象的ExecuteReader方法执行方法执行CommandText中的命令;并把返回的结果放在中的命令;并把返回的结果放在SqlDataReader对象中对象中。通过循环,处理数据库查询结果。通过循环,处理数据库查询结果。关闭与数据库连接;关闭与数据库连接;【例【例8-7】演示如何使用】演示如何使用SqlDataReader对象读取对象读取StuInfo表的记
28、录。表的记录。参见示例参见示例第第08章章SqlServerDemoDataReaderDemo.aspx v使用使用SqlDataReader对象时,应注意以下几点:对象时,应注意以下几点:v读取数据时,读取数据时,SqlConnection对象必须处于打对象必须处于打开状态。开状态。v必须通过必须通过SqlCommand对象的对象的ExecuteReader()方法,产生方法,产生SqlDataReader对象的实例。对象的实例。v只能按向下的顺序逐条读取记录,不能随机读只能按向下的顺序逐条读取记录,不能随机读取。且无法直接获知读取记录的总数。取。且无法直接获知读取记录的总数。SqlDat
29、aReader对象管理的查询结果是只读的,对象管理的查询结果是只读的,不能修改。不能修改。在在Visual Studio 2010的的Web应用程序中,提供了大量列表绑应用程序中,提供了大量列表绑定控件,如定控件,如DropDownList、ListBox和和GridView控件等,可以控件等,可以直接将直接将SqlDataReader对象绑定到这些控件来显示查询结果。对象绑定到这些控件来显示查询结果。与控件绑定时,主要设置控件的以下属性和方法:与控件绑定时,主要设置控件的以下属性和方法:DataSource属性:设置控件的数据源,可以是属性:设置控件的数据源,可以是SqlDataReader
30、对象,也可以是对象,也可以是DataSet对象。对象。DataMember属性:当数据源为属性:当数据源为DataSet对象时,设置控件对象时,设置控件要显示的数据表名。要显示的数据表名。DataTextField属性:对于绑定属性:对于绑定DropDownList、ListBox等控件时,设置显示数据的字段名称。等控件时,设置显示数据的字段名称。DataValueField属性:对于绑定属性:对于绑定DropDownList、ListBox等控件时,设置隐藏值的字段名称。等控件时,设置隐藏值的字段名称。DataBind方法:设置完控件的绑定属性后,调用该方法将方法:设置完控件的绑定属性后,调
31、用该方法将数据绑定到控件上。数据绑定到控件上。【例【例8-8】演示如何将】演示如何将SqlDataReder对象与对象与DropDownList控件绑定。本示例主要在控件绑定。本示例主要在DropDownList控件中显示控件中显示Major表的记录。表的记录。参见示例参见示例第第08章章SqlServerDemoDataReader_DataBind.aspx 8.2.4 为为SqlCommand传递参数传递参数【例例8-9】演示如何创建一个登录页面。演示如何创建一个登录页面。 参见示例参见示例第第08章章SqlServerDemoLogin.aspx 【例【例8-10】下面演示如何使用参数
32、化的方法安全登录网站。】下面演示如何使用参数化的方法安全登录网站。参见示例参见示例第第08章章SqlServerDemoLogin.aspx 8.2.5 使用使用SqlCommand执行存储过程执行存储过程存储过程是存储过程是SQL语句和可选控制流语句的预编译集合,以语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。对于大中型的应用程序一个名称存储并作为一个单元处理。对于大中型的应用程序中,使用存储过程具有下列优点:中,使用存储过程具有下列优点:一次创建和测试好后,可以多次供应用程序调用一次创建和测试好后,可以多次供应用程序调用数据库人员和数据库人员和Web应用程序开发人员可
33、以独立地工作,简应用程序开发人员可以独立地工作,简化了分工。化了分工。Web应用程序和开发人员不直接访问数据库,提高了数据应用程序和开发人员不直接访问数据库,提高了数据库的安全性。库的安全性。存储过程在创建时即在服务器上进行预编译,因此具有较存储过程在创建时即在服务器上进行预编译,因此具有较高的执行效率。高的执行效率。一个存储过程可以执行上百条一个存储过程可以执行上百条SQL语句,降低网络通信量。语句,降低网络通信量。存储过程或数据库结构的更改不会影响应用程序,具有一存储过程或数据库结构的更改不会影响应用程序,具有一定的灵活性。定的灵活性。存储过程按返回值的情况,同样分为存储过程按返回值的情况
34、,同样分为3种:返回记录的存储种:返回记录的存储过程;返回单个值的存储过程;执行操作的存储过程。使用过程;返回单个值的存储过程;执行操作的存储过程。使用SqlCommand对象执行存储过程与执行对象执行存储过程与执行SQL语句一样,分为语句一样,分为以下以下3种情况。种情况。返回记录的存储过程返回记录的存储过程:使用:使用SqlCommand对象的对象的ExecuteReader方法执行,并从数据库中获取查询结果集。方法执行,并从数据库中获取查询结果集。返回标量值的存储过程返回标量值的存储过程:使用:使用SqlCommand对象的对象的ExecuteScalar方法执行,并从数据库中检索单个值
35、方法执行,并从数据库中检索单个值执行操作的存储过程执行操作的存储过程:使用:使用SqlCommand对象的对象的ExecuteNoQuery方法执行,并返回受影响的记录数。方法执行,并返回受影响的记录数。【例【例8-11】演示如何使用存储过程的方法安】演示如何使用存储过程的方法安全登录网站。全登录网站。参见示例参见示例第第08章章SqlServerDemoLogin.aspx 8.2.6 使用事务处理使用事务处理v在在.Net中,事务处理机制共有中,事务处理机制共有4种:种:数据库事务数据库事务ADO.NET事务事务ASP.NET事务事务企业服务级事务企业服务级事务【例【例8-12】下面演示如
36、何使用】下面演示如何使用ADO.NET事务。在事务。在Student数据库中,删除数据库中,删除Major表的专业记录的同时,表的专业记录的同时,希望在希望在StuInfo表中删除该专业的学生记录。表中删除该专业的学生记录。参见示例参见示例第第08章章SqlServerDemoTransactionDemo.aspx 8.3 断开模式数据库访问断开模式数据库访问vDataSet数据集数据集 v使用使用SqlDataAdapter对象执行数据库命令对象执行数据库命令 v断开模式访问数据库的开发流程有以下几个步骤:断开模式访问数据库的开发流程有以下几个步骤:v创建创建SqlConnection对象
37、与数据库建立连接;对象与数据库建立连接;v创建创建SqlDataAdapter对象对数据库执行对象对数据库执行SQL命令命令或存储过程,包括增、删、改及查询数据库等命令;或存储过程,包括增、删、改及查询数据库等命令;如果查询数据库的数据,则使用如果查询数据库的数据,则使用SqlDataAdapter的的Fill方法填充方法填充DataSet;如果是对数据库进行增、;如果是对数据库进行增、删、改操作,首先要对删、改操作,首先要对DataSet对象进行更新,然对象进行更新,然后使用后使用SqlDataAdapter的的Update方法将方法将DataSet中的修改内容更新到数据库中。使用中的修改内
38、容更新到数据库中。使用SqlDataAdapter对数据库的操作过程中,连接的对数据库的操作过程中,连接的打开和关闭是自动完成的,无需手动编码。打开和关闭是自动完成的,无需手动编码。断开模式访问数据库断开模式访问数据库 8.3.1 DataSet数据集数据集vDataSet是是ADO.NET的核心组建之一,位于的核心组建之一,位于System.Data命名空间下,是一个内存中的小型数据库。命名空间下,是一个内存中的小型数据库。v数据集是包含数据表的对象,可以在这些数据表中临时数据集是包含数据表的对象,可以在这些数据表中临时存储数据以便在应用程序中使用。存储数据以便在应用程序中使用。v如果应用程
39、序要求使用数据,则可以将该数据加载到数如果应用程序要求使用数据,则可以将该数据加载到数据集中,数据集在本地内存中为应用程序提供了待用数据集中,数据集在本地内存中为应用程序提供了待用数据的缓存。即使应用程序从数据库断开连接,也可以使据的缓存。即使应用程序从数据库断开连接,也可以使用数据集中的数据。用数据集中的数据。v数据集维护有关其数据更改的信息,因此可以跟踪数据数据集维护有关其数据更改的信息,因此可以跟踪数据更新,并在应用程序重新连接时将更新发送回数据库。更新,并在应用程序重新连接时将更新发送回数据库。 DataSet对象的结构模型图对象的结构模型图 v数据集可以分为类型化和非类型化两种数据集
40、。数据集可以分为类型化和非类型化两种数据集。v类型化数据集是继承自类型化数据集是继承自DataSet类,通过类,通过“数据集数据集设计器设计器”创建一个新的强类型数据集类。其架构信创建一个新的强类型数据集类。其架构信息如表、行、列等都已内置。由于类型化数据集继息如表、行、列等都已内置。由于类型化数据集继承自承自DataSet类,因此类型化数据集具有类,因此类型化数据集具有DataSet类类的所有功能。的所有功能。v非类型化数据集没有相应的内置架构。与类型化数非类型化数据集没有相应的内置架构。与类型化数据集一样,非类型化数据集也包含表、列等,但它据集一样,非类型化数据集也包含表、列等,但它们只作
41、为集合公开。们只作为集合公开。1数据集(数据集(DataSet)对象创建)对象创建创建创建DataSet的语法格式为:的语法格式为:DataSet 对象名对象名 = new DataSet();或或DataSet 对象名对象名 = new DataSet(数据集名数据集名);例如,创建数据集对象例如,创建数据集对象dsStu,代码如下:,代码如下:DataSet dsStu = new DataSet();或或DataSet dsStu = new DataSet(Student);DataSet对象的常用属性和方法对象的常用属性和方法2数据表(数据表(DataTable)对象的创建)对象的创
42、建DataSet中的每个数据表都是一个中的每个数据表都是一个DataTable对象。对象。定义定义DataTable对象的语法格式为:对象的语法格式为:DataTable 对象名对象名 = new DataTable();或或DataTable 对象名对象名 = new DataTable(数据表名数据表名);例如,创建数据表对象例如,创建数据表对象dtStu,代码如下:,代码如下:DataTable dtStuInfo = new DataTable();dtStuInfo.TableName=StuInfo;或或DataTable dtStuInfo = new DataTable(Stu
43、Info);DataTable对象的常用属性和方法对象的常用属性和方法v创建好的数据表对象,可以添加到数据集对象中,创建好的数据表对象,可以添加到数据集对象中,代码如下:代码如下:dsStu.Tables.Add(dtStuInfo);3数据列(数据列(DataColumn)对象的创建)对象的创建vDataTable对象中包含多个数据列,每列就是一个对象中包含多个数据列,每列就是一个DataColumn对象。定义对象。定义DataColumn对象的语法对象的语法格式为:格式为:DataColumn 对象名对象名 = new DataColumn();或或DataColumn 对象名对象名 =
44、new DataColumn(字段名字段名);或或DataColumn 对象名对象名 = new DataColumn(字段名字段名,数据类型数据类型);例如,创建数据列对象例如,创建数据列对象stuNoColumn,代码如下:,代码如下:DataColumn stuNoColumn= new DataColumn();stuNoColumn.ColumnName= StuNo;stuNoColumn.DataType =System.Type.GetType(System.String);或或DataColumn stuNoColumn= new DataColumn(StuNo, Syst
45、em.Type.GetType(System.String);DataTable对象的常用属性和方法对象的常用属性和方法说明:说明:通过通过DataColumn对象的对象的DataType属性设置字段数据属性设置字段数据类型时,不可直接设置数据类型,而要按照以下语法格式:类型时,不可直接设置数据类型,而要按照以下语法格式:对象名对象名.DataType = System.Type.GetType(数据类型数据类型);v创建好的数据列对象,可以添加到数据表对象中,创建好的数据列对象,可以添加到数据表对象中,代码如下:代码如下:dtStuInfo.Columns.Add(stuNoColumn);
46、4数据行(数据行(DataRow)的创建)的创建DataTable对象可以包含多个数据列,每行就是一个对象可以包含多个数据列,每行就是一个DataRow对象。定义对象。定义DataRow对象的语法格式为:对象的语法格式为:DataRow 对象名对象名 = DataTable对象对象.NewRow();注意注意:DataRow对象不能用对象不能用New来创建,而需要用数来创建,而需要用数据表对象的据表对象的NewRow方法创建。方法创建。例如,为数据表对象例如,为数据表对象dtStu添加一个新的数据行,代添加一个新的数据行,代码如下:码如下:DataRow dr = dtStuInfo.NewR
47、ow();访问一行中某个单元格内容的方法为:访问一行中某个单元格内容的方法为:DataRow对象名对象名字段名字段名或或DataRow对象名对象名序号序号DataRow对象的常用属性和方法对象的常用属性和方法5视图对象(视图对象(DataView)的创建)的创建数据视图数据视图DataView是一个对象,它位于数据表上面是一个对象,它位于数据表上面一层,提供经过筛选和排序后的表视图。通过定制数一层,提供经过筛选和排序后的表视图。通过定制数据视图可以选择只显示表记录的一个子集,同时在一据视图可以选择只显示表记录的一个子集,同时在一个数据表上可定义多个个数据表上可定义多个DataView。定义定义
48、DataView对象的语法格式为:对象的语法格式为:DataView 对象名对象名= new DataView(数据表对象数据表对象);例如:例如:DataView dvStuInfo = new DataView(dtStuInfo);DataView对象可以通过以下对象可以通过以下2个属性定制不同的个属性定制不同的数据视图。数据视图。RowFilter属性:设置选取数据行的筛选表达式。属性:设置选取数据行的筛选表达式。Sort属性:设置排序字段和方式。属性:设置排序字段和方式。例如:例如:DataView dvStuInfo = new DataView (ds.Tables(StuInf
49、o);dvStuInfo.Sort = StuNo desc; /按按StuNo字段字段降序排,如果要升序,将降序排,如果要升序,将desc改为改为ascdvStuInfo.RowFilter = Name = 张三张三;/筛选出筛选出姓名为张三的学生姓名为张三的学生【例【例8-13】在内存中的数据集中,创建一个数据表】在内存中的数据集中,创建一个数据表StuInfo,包含学号(,包含学号(StuNo 字符串型)、姓名字符串型)、姓名(Name 字符串型)和性别(字符串型)和性别(Sex 字符串型)。对字符串型)。对于所建立的内存数据表于所建立的内存数据表StuInfo,编写程序逐行将,编写程
50、序逐行将数据填入该数据表,最后将数据绑定到页面的数据填入该数据表,最后将数据绑定到页面的GridView控件上。控件上。参见示例参见示例第第08章章SqlServerDemoDataSetDemo.aspx 6类型化的数据集类型化的数据集创建类型化的数据集有多种方法,下面介绍如何使用创建类型化的数据集有多种方法,下面介绍如何使用“数据数据集设计器集设计器”创建数据集。创建数据集。 在在“解决方案资源管理器中解决方案资源管理器中”,鼠标右键单击项目名称,选,鼠标右键单击项目名称,选择择“添加新项添加新项”菜单。菜单。 从从“添加新项添加新项”对话框中选择对话框中选择“数据集数据集”。 键入该数据
51、集的名称。键入该数据集的名称。 单击单击“添加添加”按钮。按钮。Visual Studio 2010会提示把强类型数会提示把强类型数据集放到据集放到App_Code目录中,选择目录中,选择“是是”按钮。数据集将添加按钮。数据集将添加到项目的到项目的App_Code目录下,并打开目录下,并打开“数据集设计器数据集设计器”。可以从可以从“工具箱工具箱”的的“数据集数据集”选项卡中拖数据表等控件到选项卡中拖数据表等控件到设计器上,设计相应的数据集,该数据集存储在设计器上,设计相应的数据集,该数据集存储在.xsd文件中。文件中。【例【例8-14】演示如何使用类型化的数据集完成【例】演示如何使用类型化的
52、数据集完成【例8-13】的功能。】的功能。参见示例参见示例第第08章章SqlServerDemoDSStudent.xsd和和DSStudentDemo.aspx v下面将非类型化数据集与类型化数据集比较,类型下面将非类型化数据集与类型化数据集比较,类型化数据集有以下两个优势。化数据集有以下两个优势。类型化数据集的架构信息已经预先类型化数据集的架构信息已经预先“硬编码硬编码”到数据集内。到数据集内。也就是说,数据集按将要获取的数据的表、列以及数据类也就是说,数据集按将要获取的数据的表、列以及数据类型预先初始化了。这样,执行查询获取实际信息时会稍微型预先初始化了。这样,执行查询获取实际信息时会稍
53、微快一些,因为数据提供程序分两步填充空快一些,因为数据提供程序分两步填充空DataSet。它首先。它首先获取最基础的架构信息,然后再执行查询。获取最基础的架构信息,然后再执行查询。可以通过类型化数据集的属性名称而不是基于字段查找的可以通过类型化数据集的属性名称而不是基于字段查找的方式访问表和字段的值。这样,如果使用了错误的表名、方式访问表和字段的值。这样,如果使用了错误的表名、字段名或数据类型,就可以在编译时而不是运行时捕获错字段名或数据类型,就可以在编译时而不是运行时捕获错误。误。例如,要访问例如,要访问StuInfo表的第表的第i行行Name字段的值,非类型化字段的值,非类型化数据集的方法
54、是数据集的方法是dsStu.TablesStuInfo.RowsiName;类型化的数;类型化的数据集的方法是据集的方法是dsStu.StuInfoi.Name。 8.3.2 使用使用SqlDataAdapter对象执行对象执行数据库命令数据库命令vDataAdapter是一个特殊的类,其作用是数据源与是一个特殊的类,其作用是数据源与DataSet对象之间沟通的桥梁。对象之间沟通的桥梁。vDataAdapter提供了双向的数据传输机制,它可以提供了双向的数据传输机制,它可以在数据源上执行在数据源上执行Select语句,把查询结果集传送到语句,把查询结果集传送到DataSet对象的数据表(对象的
55、数据表(DataTable)中,还可以执)中,还可以执行行Insert、Update和和Delete语句,将语句,将DataTable对对象更改过的数据提取并更新回数据源。象更改过的数据提取并更新回数据源。 vDataAdapte对象包含四个常用属性:对象包含四个常用属性:SelectCommad属性属性:是一个:是一个Command对对象,用于从数据源中检索数据。象,用于从数据源中检索数据。InsertCommand、UpdateCommand和和DeleteCommand属性属性:也是:也是Command对象,对象,用于按照对用于按照对DataSet中数据的修改来管理对数中数据的修改来管理
56、对数据源中数据的更新。据源中数据的更新。vDataAdapter对象的常用方法:对象的常用方法:Fill方法方法:调用:调用Fill方法会自动执行方法会自动执行SelectCommand属性中提供的命令,获取结果属性中提供的命令,获取结果集并填充数据集的集并填充数据集的DataTable对象。其本质是通对象。其本质是通过执行过执行SelectCommand对象的对象的Select语句查询语句查询数据库,返回数据库,返回DataReader对象,通过对象,通过DataReader对象隐式地创建对象隐式地创建DataSet中的表,并中的表,并填充填充DataSet中表行的数据。中表行的数据。vUp
57、date方法方法:调用:调用InsertCommand、UpdateCommand和和DeleteCommand属性指定的属性指定的SQL命令,将命令,将DataSet对象更新到相应的数据源。对象更新到相应的数据源。在在Update方法中,逐行检查数据表每行的方法中,逐行检查数据表每行的RowState属性值,根据不同的属性值,根据不同的RowState属性,调属性,调用不同的用不同的Command命令更新数据库。命令更新数据库。DataAdapter对象更新数据库示例图如图所示。对象更新数据库示例图如图所示。定义定义SqlDataAdapter对象的方法有对象的方法有4种:种:SqlDataAdapter对象名对象名= new SqlDataAdapter()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修技术专利转让协议书
- 肉鸭养殖合同放养协议书
- 解除酒店装修合同范本
- 经济纠纷合同和解协议书
- 财务预算调整与应对方案计划
- 构建医患沟通机制的总结与建议计划
- 疫情期间幼儿安全协议书
- 加强项目成果评估的工作总结计划
- 渔具生意转让协议书
- 中石油购油协议书
- 牙周检查记录表
- 外墙涂料吊篮施工方案
- 《新时代劳动教育》新时代劳动价值观
- 第四章 地陪导游服务程序与服务质量
- 山东紫薇种质资源调查报告
- 2023年医疗招聘技术类-影像医学与核医学考试历年真题集锦附答案
- “循环经济关键技术与装备”重点专项2023年度项目申报指南
- 旅行社应急处置方案
- 中移L2认证(集团)备考题库(浓缩版)
- 混凝土交接单
- 单作用叶片泵的工作原理
评论
0/150
提交评论