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、在后台代码中引用对应的命名空间,类的名称也随之变化。也随之变化。数据访问提供程序数据访问提供程序名称空间名称空间对应的类名称对应的类名称SQL Server数据提数据提供程序供程序System.Data.SqlClientSqlConnection;SqlCommand;SqlDataReader;SqlDataAdapterOLE DB数据提供数据提供程序程序System.Data.OleDbOledbConnection;OledbCommand;OledbDataReader;OledbDataAdapterODBC数据提供程数据提供程序序System.Data.OdbcOdbcConn
4、ection;OdbcCommand;OdbcDataReader;OdbcDataAdapterOracle数据提供程数据提供程序序System.Data.OracleClientOracleConnection;OracleCommand;OracleDataReader;OracleDataAdapter8.1.3 ADO.NET的数据访问模式的数据访问模式8.2 连接模式数据库访问连接模式数据库访问v使用使用SqlConnection对象连接数据库对象连接数据库 v使用使用SqlCommand对象执行数据库命令对象执行数据库命令 v使用使用SqlDataReader读取数据读取数据 v
5、为为SqlCommand传递参数传递参数 v使用使用SqlCommand执行存储过程执行存储过程v使用事务处理使用事务处理 连接模式访问数据库的开发流程有以下几个步骤:连接模式访问数据库的开发流程有以下几个步骤:v创建创建SqlConnection对象与数据库建立连接;对象与数据库建立连接;v创建创建SqlCommand对象对数据库执行对象对数据库执行SQL命令或命令或存储过程,包括增、删、改及查询数据库等命令;存储过程,包括增、删、改及查询数据库等命令;v如果查询数据库的数据,则创建如果查询数据库的数据,则创建SqlDataReader对对象读取象读取SqlCommand命令查询到的结果集,
6、并将查命令查询到的结果集,并将查到的结果集绑定到控件上。到的结果集绑定到控件上。8.2.1 使用使用SqlConnection对象连接对象连接数据库数据库1示例数据库的创建示例数据库的创建 v创建一个示例数据库创建一个示例数据库Student,该数据库包含,该数据库包含StuInfo、Major和和UserInfo三张表,数据库三张表,数据库表结构关系图。表结构关系图。【例【例8-1】演示如何在】演示如何在Visual Studio 2008开发环境开发环境下创建数据库。下创建数据库。参见示例参见示例第第08章章SqlServerDemoStudent.mdf 2创建数据库连接创建数据库连接操
7、作数据库的第一步是建立与数据库的连接,因此首操作数据库的第一步是建立与数据库的连接,因此首先要创建先要创建SqlConnection对象。要创建对象。要创建SqlConnection对对象必须先了解象必须先了解SqlConnection对象的常用属性和方法。对象的常用属性和方法。属属 性性说说 明明ConnectionString取得和设置连接字符串取得和设置连接字符串ConnectionTimeOut获取获取SqlConnection对象的超时时间,单位为秒,对象的超时时间,单位为秒,0表示不表示不限制。若在这个时间之内无法连接数据源,则产生异常限制。若在这个时间之内无法连接数据源,则产生异
8、常Database获取当前数据库名称获取当前数据库名称DataSource获取数据源的完整路径和文件名,若是获取数据源的完整路径和文件名,若是SQL Server数据库数据库则获取所连接的则获取所连接的SQL Server服务器名称服务器名称State获取数据库的连接状态,它的值获取数据库的连接状态,它的值ConnectionState枚举值枚举值SqlConnection对象的常用属性对象的常用属性vConnectionString属性通常包含以下参数,各参数属性通常包含以下参数,各参数间用间用“;”分隔。分隔。Provider:用于设置数据源的:用于设置数据源的OLE DB驱动程序。驱动程
9、序。如:如:Access为为“Microsoft.Jet.OLEDB.4.0”;SQL Server 6.5或之前版本为或之前版本为“SQLOLEDB”。Data Source:设置数据源的实际路径。:设置数据源的实际路径。Password:设置登录数据库所使用的密码。:设置登录数据库所使用的密码。User ID:设置登录数据库时所使用的帐号:设置登录数据库时所使用的帐号。例如,连接例如,连接Access数据库的的连接参数为:数据库的的连接参数为:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:abc.mdbv对于对于SQL7.0或更高版本的或更高
10、版本的SQL数据库,数据库,ConnectionString属性包含的主要参数有:属性包含的主要参数有:Data Source或或Server:设置需连接的数据库服务器名称。:设置需连接的数据库服务器名称。Initial Catalog或或Database:设置连接的数据库名称。:设置连接的数据库名称。AttachDBFilename:数据库的路径和文件名。:数据库的路径和文件名。User ID 或或 uid:登录:登录SQL Server数据库的账户。数据库的账户。Password 或或 pwd:登录:登录SQL Server数据库的密码。数据库的密码。Integrated Security
11、:是否使用:是否使用Windows集成身份验证,集成身份验证,值有三种:值有三种:true、false和和SSPI,true和和SSPI表示使用表示使用Windows集成身份验证。集成身份验证。Connection Timeout:设置:设置SqlConnection对象连接对象连接SQL数据库服务器的超时时间,单位为秒,若在所设置的时间内数据库服务器的超时时间,单位为秒,若在所设置的时间内无法连接数据库,则返回失败信息。默认为无法连接数据库,则返回失败信息。默认为15秒。秒。v连接数据库时,有两种验证模式:连接数据库时,有两种验证模式:混合验证模式混合验证模式Windows集成验证模式集成验
12、证模式v使用混合验证模式的连接参数为:使用混合验证模式的连接参数为:Data Source=localhost;Initial Catalog=northwind;User Id=sa;pwd=123其中,其中,Data Source=localhost表示连接本机表示连接本机SQL数数据库的默认服务器。据库的默认服务器。v使用使用Windows集成验证模式的连接参数为:集成验证模式的连接参数为:Data Source=localhost;Initial Catalog=northwind;Integrated Security=truev混合验证模式必须在连接字符串中以明文形式保存混合验证模
13、式必须在连接字符串中以明文形式保存用户名和密码,因此安全性较差。用户名和密码,因此安全性较差。Windows集成验集成验证模式不发送用户名和密码;仅发送用户通过身份证模式不发送用户名和密码;仅发送用户通过身份验证的信息。从安全角度考虑,建议使用验证的信息。从安全角度考虑,建议使用Windows集成验证模式。集成验证模式。v在本书的示例中,数据库都是放在网站的在本书的示例中,数据库都是放在网站的App_Data目录下。如例【目录下。如例【8-1】中创建的】中创建的Student数据库的连接参数应设置为:数据库的连接参数应设置为:Data Source=.SQLEXPRESS;AttachDbFi
14、lename=|DataDirectory|Student.mdf;Integrated Security=True;User Instance=Truev其中,其中,Data Source=.SQLEXPRESS表示表示SQL Server2005的的SQLEXPRESS数据库服务器,数据库服务器,AttachDbFilename表示数据库的路径和文件名,表示数据库的路径和文件名,|DataDirectory|表示网站默认数据库路径表示网站默认数据库路径App_Data。SqlConnection对象的常用方法对象的常用方法方方 法法说说 明明Open()打开与数据库的连接打开与数据库的连接
15、Close()关闭与数据库的连接关闭与数据库的连接BeginTransaction()开始一个数据库事务,可以指定事务的开始一个数据库事务,可以指定事务的名称和隔离级别名称和隔离级别ChangeDatabase()在打开连接的状态下,更改当前数据库在打开连接的状态下,更改当前数据库CreateCommand()创建并返回与创建并返回与SqlConnection对象有关的对象有关的SqlCommand对象对象Dispose()调用调用Close()方法关闭与数据库的连接,方法关闭与数据库的连接,并释放所占用的系统资源并释放所占用的系统资源v在创建数据库连接对象时,需要指定连接字符串。通常在创建数
16、据库连接对象时,需要指定连接字符串。通常有以下有以下2种方法获取连接字符串:种方法获取连接字符串:创建连接对象,并在应用程序的中硬编码连接字符创建连接对象,并在应用程序的中硬编码连接字符串。串。SqlConnection 对象名称对象名称=new SqlConnection(连接连接字符串字符串);或或SqlConnection 对象名称对象名称 =new SqlConnection();对象名称对象名称.ConnectionString=连接字符串连接字符串;v把连接字符串放在应用程序的把连接字符串放在应用程序的web.config文件中,文件中,再引用再引用web.config文件。文件。
17、在在web.config配置文件的配置文件的节中节中添加如下的代码。添加如下的代码。vweb.config文件中有了连接字符串后,就可以从文件中有了连接字符串后,就可以从web.config中读取连接字符串。需要使用中读取连接字符串。需要使用System.Configuration.ConfigurationManager类类读取连接字符串。代码如下:读取连接字符串。代码如下:string strCnn=ConfigurationManager.ConnectionStringsStudentCnnString.ConnectionString;/读取连接字符串读取连接字符串SqlConnec
18、tion cnn=new SqlConnection(strCnn);/定义连接对象定义连接对象为了使上述代码正常工作,必须使用为了使上述代码正常工作,必须使用using System.Configuration语句引入命名空间。语句引入命名空间。v创建好创建好SqlConnection连接对象后,并没有与数据连接对象后,并没有与数据库建立连接,要建立数据库连接,还必须使用库建立连接,要建立数据库连接,还必须使用cnn.Open()方法打开数据连接,然后才可以对数据方法打开数据连接,然后才可以对数据库进行各种操作。操作完数据库后,一定要使用库进行各种操作。操作完数据库后,一定要使用cnn.Cl
19、ose()方法关闭连接。方法关闭连接。.【例【例8-2】演示如何建立】演示如何建立Student数据库的连接。数据库的连接。参见示例参见示例第第08章章SqlServerDemoConnectionDemo.aspx 8.2.2 使用使用SqlCommand对象执行数对象执行数据库命令据库命令v成功连接数据库后,接着就可以使用成功连接数据库后,接着就可以使用SqlCommand对象对数据库进行各种操作,如读取、写入、修改对象对数据库进行各种操作,如读取、写入、修改和删除等操作。和删除等操作。SqlCommand对象的常用属性对象的常用属性属属 性性说说 明明CommandText获取或设置要对
20、数据源执行的获取或设置要对数据源执行的SQL命令、存储过程或数据命令、存储过程或数据表名称表名称CommandType获取或设置命令类型,可取的值:获取或设置命令类型,可取的值:CommandType.Text、CommandType.StoredProduce或或CommandType.TableDirect,分别对应,分别对应SQL命令、存储过命令、存储过程或数据表名称,默认为程或数据表名称,默认为Text。Connection获取或设置获取或设置SqlCommand对象所使用的数据连接属性对象所使用的数据连接属性ParametersSQL命令参数集合命令参数集合Transaction设置
21、设置Command对象所属的事务对象所属的事务v建立建立SqlCommand对象的方法有对象的方法有4种:种:SqlCommand 对象名对象名=new SqlCommand();SqlCommand 对象名对象名=new SqlCommand(SQL命令命令);SqlCommand 对象名对象名=new SqlCommand(SQL命令命令,连接对象连接对象);SqlCommand 对象名对象名=new SqlCommand(SQL命令命令,连接对象连接对象,事务对象事务对象);SqlCommand对象的常用方法对象的常用方法方方 法法说说 明明Cancel取消取消SqlCommand对象的
22、执行对象的执行CreateParameter创建创建Parameter对象对象ExecuteNonQuery执行执行CommandText属性指定的内容,返回数据表被影响属性指定的内容,返回数据表被影响的行数。该方法只能执行的行数。该方法只能执行Insert、Update和和Delete命令命令ExecuteReader执行执行CommandText属性指定的内容,返回属性指定的内容,返回DataReader对对象。该方法用于执行返回多条记录的象。该方法用于执行返回多条记录的Select命令命令ExecuteScalar执行执行CommandText属性指定的内容,以属性指定的内容,以obje
23、ct类型返回结类型返回结果表第一行第一列的值。该方法一般用来执行查询单值果表第一行第一列的值。该方法一般用来执行查询单值的的Select命令命令ExecuteXmlReader执行执行CommandText属性指定的内容,返回属性指定的内容,返回XmlReader对对象。该方法以象。该方法以XML文档格式返回结果集文档格式返回结果集1.ExecuteNonQuery方法方法ExecuteNonQuery方法只能执行方法只能执行Insert、Update和和Delete命令,因此可以增加、修改和删除数据库中的命令,因此可以增加、修改和删除数据库中的数据。增加、修改和删除数据库中的数据的步骤相同,
24、数据。增加、修改和删除数据库中的数据的步骤相同,具体描述如下:具体描述如下:创建创建SqlConnection对象,设置连接字符串;对象,设置连接字符串;创建创建SqlCommand对象,设置它的对象,设置它的Connection和和CommandText属性,分别表示数据库连接和属性,分别表示数据库连接和需要执行的需要执行的SQL命令。命令。打开与数据库连接;打开与数据库连接;使用使用SqlCommand对象的对象的ExecuteNonQuery方方法执行法执行CommandText中的命令;并根据返回值中的命令;并根据返回值判断是否对数据库操作成功。判断是否对数据库操作成功。关闭与数据库连
25、接;关闭与数据库连接;【例【例8-3】演示如何使用】演示如何使用ExecuteNonQuery方法增加方法增加Student数据库中数据库中UserInfo表的用户信息。表的用户信息。参见示例参见示例第第08章章SqlServerDemoCommand_InsertDemo.aspx【例【例8-4】演示如何使用】演示如何使用ExecuteNonQuery方法修改方法修改Student数据库中数据库中UserInfo表的用户信息。表的用户信息。参见示例参见示例第第08章章SqlServerDemoCommand_UpdateDemo.aspx 【例【例8-5】演示如何使用】演示如何使用Execu
26、teNonQuery方法删除方法删除Student数据库中数据库中UserInfo表的用户信息。表的用户信息。参见示例参见示例第第08章章SqlServerDemoCommand_DeleteDemo.aspx 2.ExecuteScalar方法方法vExecuteScalar方法一般用来执行查询单值的方法一般用来执行查询单值的Select命令,它以命令,它以object类型返回结果表第一行类型返回结果表第一行第一列的值。对数据库操作时,具体步骤如下:第一列的值。对数据库操作时,具体步骤如下:创建创建SqlConnection对象,设置连接字符串;对象,设置连接字符串;创建创建SqlComma
27、nd对象,设置它的对象,设置它的Connection和和CommandText属性;属性;打开与数据库连接;打开与数据库连接;使用使用SqlCommand对象的对象的ExecuteScalar方法方法执行执行CommandText中的命令;并返回结果表中的命令;并返回结果表第一行第一列的值供应用程序使用。第一行第一列的值供应用程序使用。关闭与数据库连接;关闭与数据库连接;【例【例8-6】演示如何使用】演示如何使用ExecuteScalar方法查询方法查询Student数据库中数据库中StuInfo表的学生人数。表的学生人数。参见示例参见示例第第08章章SqlServerDemoCommand_
28、ExecuteScalar.aspx 8.2.3 使用使用SqlDataReader读取数据读取数据vSqlDataReader对象是一个向前只读的记录指针,用对象是一个向前只读的记录指针,用于快速读取数据。对于只需要顺序显示数据表中记录于快速读取数据。对于只需要顺序显示数据表中记录的应用而言,的应用而言,SqlDataReader对象是比较理想的选择。对象是比较理想的选择。v在读取数据时,它需要与数据源保持实时连接,以循在读取数据时,它需要与数据源保持实时连接,以循环的方式读取结果集中的数据。这个对象不能直接实环的方式读取结果集中的数据。这个对象不能直接实例化,而必须调用例化,而必须调用Sq
29、lCommand对象的对象的ExecuteReader方法才能创建有效的方法才能创建有效的SqlDataReader对象。对象。SqlDataReader对象一旦创建,即可通过对象对象一旦创建,即可通过对象的属性、方法访问数据源中的数据。的属性、方法访问数据源中的数据。vSqlDataReader对象的常用属性:对象的常用属性:FieldCount:获取由:获取由SqlDataReader得到的一得到的一行数据中的字段数。行数据中的字段数。isClosed:获取:获取SqlDataReader对象的状态。对象的状态。true表示关闭,表示关闭,false表示打开。表示打开。HasRows:表示
30、:表示SqlDataReader是否包含数据。是否包含数据。SqlDataReader对象的常用方法:对象的常用方法:Close()方法:不带参数,无返回值,用来关闭方法:不带参数,无返回值,用来关闭SqlDataReader对象。对象。Read()方法:让记录指针指向本结果集中的下一条记录,返回值是方法:让记录指针指向本结果集中的下一条记录,返回值是true或或false。NextResult()方法:当返回多个结果集时,使用该方法让记录指针指向方法:当返回多个结果集时,使用该方法让记录指针指向下一个结果集。当调用该方法获得下一个结果集后,依然要用下一个结果集。当调用该方法获得下一个结果集后
31、,依然要用Read方法方法来遍历访问该结果集。来遍历访问该结果集。GetValue(int i)方法:根据传入的列的索引值,返回当前记录行里指定方法:根据传入的列的索引值,返回当前记录行里指定列的值。由于事先无法预知返回列的数据类型,所以该方法使用列的值。由于事先无法预知返回列的数据类型,所以该方法使用Object类型来接收返回数据。类型来接收返回数据。GetValues(Object values)方法:该方法会把当前记录行里所有的数方法:该方法会把当前记录行里所有的数据保存到一个数组里。可以使用据保存到一个数组里。可以使用FieldCount属性来获知记录里字段的总属性来获知记录里字段的总
32、数,据此定义接收返回值的数组长度。数,据此定义接收返回值的数组长度。GetDataTypeName(int i)方法:通过输入列索引,获得该列的类型。方法:通过输入列索引,获得该列的类型。GetName(int i)方法:通过输入列索引,获得该列的名称。综合使用方法:通过输入列索引,获得该列的名称。综合使用GetName和和GetValue两方法,可以获得数据表里列名和列的字段。两方法,可以获得数据表里列名和列的字段。IsDBNull(int i)方法:判断指定索引号的列的值是否为空,返回方法:判断指定索引号的列的值是否为空,返回True或或False。v使用使用SqlDataReader对象
33、查询数据库的一般步骤:对象查询数据库的一般步骤:创建创建SqlConnection对象,设置连接字符串;对象,设置连接字符串;创建创建SqlCommand对象,设置它的对象,设置它的Connection和和CommandText属性,分别表示数据库连接和需要执行属性,分别表示数据库连接和需要执行的的SQL命令。命令。打开与数据库连接;打开与数据库连接;使用使用SqlCommand对象的对象的ExecuteReader方法执行方法执行CommandText中的命令;并把返回的结果放在中的命令;并把返回的结果放在SqlDataReader对象中。对象中。通过循环,处理数据库查询结果。通过循环,处理
34、数据库查询结果。关闭与数据库连接;关闭与数据库连接;【例【例8-7】演示如何使用】演示如何使用SqlDataReader对象读取对象读取StuInfo表的记录。表的记录。参见示例参见示例第第08章章SqlServerDemoDataReaderDemo.aspx v使用使用SqlDataReader对象时,应注意以下几点:对象时,应注意以下几点:读取数据时,读取数据时,SqlConnection对象必须处于打对象必须处于打开状态。开状态。必须通过必须通过SqlCommand对象的对象的ExecuteReader()方法,产生方法,产生SqlDataReader对象的实例。对象的实例。只能按向下
35、的顺序逐条读取记录,不能随机读只能按向下的顺序逐条读取记录,不能随机读取。且无法直接获知读取记录的总数。取。且无法直接获知读取记录的总数。SqlDataReader对象管理的查询结果是只读的,对象管理的查询结果是只读的,不能修改。不能修改。在在Visual Studio 2008的的Web应用程序中,提供了大量列表绑应用程序中,提供了大量列表绑定控件,如定控件,如DropDownList、ListBox和和GridView控件等,可以控件等,可以直接将直接将SqlDataReader对象绑定到这些控件来显示查询结果。对象绑定到这些控件来显示查询结果。与控件绑定时,主要设置控件的以下属性和方法:
36、与控件绑定时,主要设置控件的以下属性和方法:DataSource属性:设置控件的数据源,可以是属性:设置控件的数据源,可以是SqlDataReader对象,也可以是对象,也可以是DataSet对象。对象。DataMember属性:当数据源为属性:当数据源为DataSet对象时,设置控件对象时,设置控件要显示的数据表名。要显示的数据表名。DataTextField属性:对于绑定属性:对于绑定DropDownList、ListBox等控件时,设置显示数据的字段名称。等控件时,设置显示数据的字段名称。DataValueField属性:对于绑定属性:对于绑定DropDownList、ListBox等控
37、件时,设置隐藏值的字段名称。等控件时,设置隐藏值的字段名称。DataBind方法:设置完控件的绑定属性后,调用该方法将方法:设置完控件的绑定属性后,调用该方法将数据绑定到控件上。数据绑定到控件上。【例【例8-8】演示如何将】演示如何将SqlDataReder对象与对象与DropDownList控件绑定。本示例主要在控件绑定。本示例主要在DropDownList控件中显示控件中显示Major表的记录。表的记录。参见示例参见示例第第08章章SqlServerDemoDataReader_DataBind.aspx 8.2.4 为为SqlCommand传递参数传递参数【例例8-9】演示如何创建一个登
38、录页面。演示如何创建一个登录页面。参见示例参见示例第第08章章SqlServerDemoLogin.aspx 【例【例8-10】下面演示如何使用参数化的方法安全登录网站。】下面演示如何使用参数化的方法安全登录网站。参见示例参见示例第第08章章SqlServerDemoLogin.aspx 8.2.5 使用使用SqlCommand执行存储过程执行存储过程存储过程是存储过程是SQL语句和可选控制流语句的预编译集合,以语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。对于大中型的应用程序一个名称存储并作为一个单元处理。对于大中型的应用程序中,使用存储过程具有下列优点:中,使用存储过
39、程具有下列优点:一次创建和测试好后,可以多次供应用程序调用一次创建和测试好后,可以多次供应用程序调用数据库人员和数据库人员和Web应用程序开发人员可以独立地工作,简应用程序开发人员可以独立地工作,简化了分工。化了分工。Web应用程序和开发人员不直接访问数据库,提高了数据应用程序和开发人员不直接访问数据库,提高了数据库的安全性。库的安全性。存储过程在创建时即在服务器上进行预编译,因此具有较存储过程在创建时即在服务器上进行预编译,因此具有较高的执行效率。高的执行效率。一个存储过程可以执行上百条一个存储过程可以执行上百条SQL语句,降低网络通信量。语句,降低网络通信量。存储过程或数据库结构的更改不会
40、影响应用程序,具有一存储过程或数据库结构的更改不会影响应用程序,具有一定的灵活性。定的灵活性。存储过程按返回值的情况,同样分为存储过程按返回值的情况,同样分为3种:返回记录的存储种:返回记录的存储过程;返回单个值的存储过程;执行操作的存储过程。使用过程;返回单个值的存储过程;执行操作的存储过程。使用SqlCommand对象执行存储过程与执行对象执行存储过程与执行SQL语句一样,分为语句一样,分为以下以下3种情况。种情况。返回记录的存储过程返回记录的存储过程:使用:使用SqlCommand对象的对象的ExecuteReader方法执行,并从数据库中获取查询结果集。方法执行,并从数据库中获取查询结
41、果集。返回标量值的存储过程返回标量值的存储过程:使用:使用SqlCommand对象的对象的ExecuteScalar方法执行,并从数据库中检索单个值方法执行,并从数据库中检索单个值执行操作的存储过程执行操作的存储过程:使用:使用SqlCommand对象的对象的ExecuteNoQuery方法执行,并返回受影响的记录数。方法执行,并返回受影响的记录数。【例【例8-11】演示如何使用存储过程的方法安】演示如何使用存储过程的方法安全登录网站。全登录网站。参见示例参见示例第第08章章SqlServerDemoLogin.aspx 8.2.6 使用事务处理使用事务处理v在在.Net中,事务处理机制共有中
42、,事务处理机制共有4种:种:数据库事务数据库事务ADO.NET事务事务ASP.NET事务事务企业服务级事务企业服务级事务【例【例8-12】下面演示如何使用】下面演示如何使用ADO.NET事务。在事务。在Student数据库中,删除数据库中,删除Major表的专业记录的同时,表的专业记录的同时,希望在希望在StuInfo表中删除该专业的学生记录。表中删除该专业的学生记录。参见示例参见示例第第08章章SqlServerDemoTransactionDemo.aspx 8.3 断开模式数据库访问断开模式数据库访问vDataSet数据集数据集 v使用使用SqlDataAdapter对象执行数据库命令对
43、象执行数据库命令 v断开模式访问数据库的开发流程有以下几个步骤:断开模式访问数据库的开发流程有以下几个步骤:创建创建SqlConnection对象与数据库建立连接;对象与数据库建立连接;创建创建SqlDataAdapter对象对数据库执行对象对数据库执行SQL命令命令或存储过程,包括增、删、改及查询数据库等命令;或存储过程,包括增、删、改及查询数据库等命令;如果查询数据库的数据,则使用如果查询数据库的数据,则使用SqlDataAdapter的的Fill方法填充方法填充DataSet;如果是对数据库进行增、;如果是对数据库进行增、删、改操作,首先要对删、改操作,首先要对DataSet对象进行更新
44、,然对象进行更新,然后使用后使用SqlDataAdapter的的Update方法将方法将DataSet中的修改内容更新到数据库中。使用中的修改内容更新到数据库中。使用SqlDataAdapter对数据库的操作过程中,连接的对数据库的操作过程中,连接的打开和关闭是自动完成的,无需手动编码。打开和关闭是自动完成的,无需手动编码。断开模式访问数据库断开模式访问数据库 8.3.1 DataSet数据集数据集vDataSet是是ADO.NET的核心组建之一,位于的核心组建之一,位于System.Data命名空间下,是一个内存中的小型数据库。命名空间下,是一个内存中的小型数据库。v数据集是包含数据表的对象
45、,可以在这些数据表中临时数据集是包含数据表的对象,可以在这些数据表中临时存储数据以便在应用程序中使用。存储数据以便在应用程序中使用。v如果应用程序要求使用数据,则可以将该数据加载到数如果应用程序要求使用数据,则可以将该数据加载到数据集中,数据集在本地内存中为应用程序提供了待用数据集中,数据集在本地内存中为应用程序提供了待用数据的缓存。即使应用程序从数据库断开连接,也可以使据的缓存。即使应用程序从数据库断开连接,也可以使用数据集中的数据。用数据集中的数据。v数据集维护有关其数据更改的信息,因此可以跟踪数据数据集维护有关其数据更改的信息,因此可以跟踪数据更新,并在应用程序重新连接时将更新发送回数据
46、库。更新,并在应用程序重新连接时将更新发送回数据库。DataSet对象的结构模型图对象的结构模型图 v数据集可以分为类型化和非类型化两种数据集。数据集可以分为类型化和非类型化两种数据集。v类型化数据集是继承自类型化数据集是继承自DataSet类,通过类,通过“数据集数据集设计器设计器”创建一个新的强类型数据集类。其架构信创建一个新的强类型数据集类。其架构信息如表、行、列等都已内置。由于类型化数据集继息如表、行、列等都已内置。由于类型化数据集继承自承自DataSet类,因此类型化数据集具有类,因此类型化数据集具有DataSet类类的所有功能。的所有功能。v非类型化数据集没有相应的内置架构。与类型
47、化数非类型化数据集没有相应的内置架构。与类型化数据集一样,非类型化数据集也包含表、列等,但它据集一样,非类型化数据集也包含表、列等,但它们只作为集合公开。们只作为集合公开。1数据集(数据集(DataSet)对象创建)对象创建创建创建DataSet的语法格式为:的语法格式为:DataSet 对象名对象名=new DataSet();或或DataSet 对象名对象名=new DataSet(数据集名数据集名);例如,创建数据集对象例如,创建数据集对象dsStu,代码如下:,代码如下:DataSet dsStu=new DataSet();或或DataSet dsStu=new DataSet(St
48、udent);DataSet对象的常用属性和方法对象的常用属性和方法属属 性性 方方 法法说说 明明DataSetName属性属性获取或设置获取或设置DataSet对象的名称对象的名称Tables属性属性获取数据集的数据表集合获取数据集的数据表集合Clear方法方法删除删除DataSet对象中所有表对象中所有表Copy方法方法复制复制DataSet的结构和数据,返回与本的结构和数据,返回与本DataSet对象具有相同结构和数据的对象具有相同结构和数据的DataSet对象对象2数据表(数据表(DataTable)对象的创建)对象的创建DataSet中的每个数据表都是一个中的每个数据表都是一个Da
49、taTable对象。对象。定义定义DataTable对象的语法格式为:对象的语法格式为:DataTable 对象名对象名=new DataTable();或或DataTable 对象名对象名=new DataTable(数据表名数据表名);例如,创建数据表对象例如,创建数据表对象dtStu,代码如下:,代码如下:DataTable dtStuInfo=new DataTable();dtStuInfo.TableName=StuInfo;或或DataTable dtStuInfo=new DataTable(StuInfo);DataTable对象的常用属性和方法对象的常用属性和方法属属 性性
50、 方方 法法说说 明明Columns属性属性获取数据表的所有字段获取数据表的所有字段DataSet属性属性获取获取DataTable对象所属的对象所属的DataSet对象对象DefaultView属性属性 获取与数据表相关的获取与数据表相关的DataView对象对象PrimaryKey属性属性 获取或设置数据表的主键获取或设置数据表的主键Rows属性属性获取数据表的所有行获取数据表的所有行TableName属性属性获取或设置数据表名获取或设置数据表名Clear()方法方法清除表中所有的数据清除表中所有的数据NewRow()方法方法创建一个与当前数据表有相同字段结构的数据创建一个与当前数据表有相