第12章 ADO数据访问技术_第1页
第12章 ADO数据访问技术_第2页
第12章 ADO数据访问技术_第3页
第12章 ADO数据访问技术_第4页
第12章 ADO数据访问技术_第5页
已阅读5页,还剩168页未读 继续免费阅读

下载本文档

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

文档简介

1、 1. 表表 2. 记录记录 3. 字段字段 4. 关系关系 5. 索引索引 6. 视图视图 7. 存储存储过程过程 12.1.1 关系数据库的基本结构关系数据库的基本结构 学生学生情况表情况表student 学生学生成绩表成绩表score Stud 数据库中有以下两个表:数据库中有以下两个表: 学号学号姓名姓名性别性别民族民族班号班号 1王华王华女女汉族汉族09001 2孙丽孙丽女女满族满族09002 3李兵李兵男男汉族汉族09001 6张军张军男男汉族汉族09001 8马棋马棋男男回族回族09002 学号学号课程名课程名分数分数学号学号课程名课程名分数分数 1C语言语言801数据结构数据结

2、构87 2C语言语言702数据结构数据结构52 3C语言语言893数据结构数据结构84 6C语言语言906数据结构数据结构95 8C语言语言888数据结构数据结构86 SQL Server 2012是微软公司在是微软公司在SQL Server 2008基础上推出基础上推出 的关系数据库管理系统,是目前主流的数据库管理系统之一。的关系数据库管理系统,是目前主流的数据库管理系统之一。 SQL Server 2012 Express是一个轻量级的免费版本。是一个轻量级的免费版本。 1. 建立数据库建立数据库Stud 在安装在安装SQL Server 2012 Express并进入并进入SQL Ser

3、ver系统后系统后 (这里的登录名为(这里的登录名为sa,密码为,密码为12345),通过右击),通过右击“数据库数据库”节节 点,在出现的快捷菜单中选择点,在出现的快捷菜单中选择“新建数据库新建数据库”命令,建立一个命令,建立一个 名称为名称为Stud的数据库,将其路径改为的数据库,将其路径改为D:ASP.NETch12网站的网站的 App_Data目录,这样自动建立目录,这样自动建立Stud.mdf和和Stud_log.ldf两个文件,两个文件, 前者为数据库主文件,后者是日志文件。前者为数据库主文件,后者是日志文件。 12.1.2 SQL Server 2012数据库管理系统数据库管理系

4、统 2. 建立数据表建立数据表student和和score 展开展开Stud数据库,右击下方的数据库,右击下方的“表表”项,在出现的快捷菜项,在出现的快捷菜 单中选择单中选择“新建表新建表”命令,可以通过交互建立表结构。这里命令,可以通过交互建立表结构。这里 新建新建student和和score两个表,前者的关键字为两个表,前者的关键字为“学号学号”,后者,后者 的关键字为的关键字为“学号学号+课程名课程名”,它们的表结构分别如图,它们的表结构分别如图12.1和和 12.2所示。所示。 输入数据记录输入数据记录 3. 权限设置权限设置 为了在网页中访问为了在网页中访问Stud数据库,必须给数据

5、库,必须给Stud数据库设置一数据库设置一 些访问权限,否则在网页运行时出现无法打开些访问权限,否则在网页运行时出现无法打开Stud数据库的登数据库的登 录失败错误。录失败错误。 1. SQL语言的组成语言的组成 SQL语言包含查询、操纵、定义和控制等几个部分。它语言包含查询、操纵、定义和控制等几个部分。它 们都是通过命令动词分开的,各种语句类型对应的命令动词们都是通过命令动词分开的,各种语句类型对应的命令动词 如下:如下: n 数据查询的命令动词为数据查询的命令动词为SELECT。 n 数据定义的命令动词为数据定义的命令动词为CREATE、DROP。 n 数据操纵的命令动词为数据操纵的命令动

6、词为INSERT、UPDATE、DELETE。 n 数据控制的命令动词为数据控制的命令动词为GRANT、REVOKE。 12.1.3 结构化查询语言(结构化查询语言(SQL) 2. 数据定义语言数据定义语言 (1)CREATE语句语句 CREATE语句用于建立数据表,其基本格式如下:语句用于建立数据表,其基本格式如下: CREATE TABLE 表名表名 (列名列名1数据类型数据类型1 NOT NULL ,列名列名2数据类型数据类型2 NOT NULL) (2)DROP语句语句 DROP语句用于删除数据表,其基本格式如下:语句用于删除数据表,其基本格式如下: DROP TABLE 表名表名 3

7、. 数据操纵语言数据操纵语言 (1)INSERT语句语句 INSERT语句用于在一个表中添加新记录,然后给新语句用于在一个表中添加新记录,然后给新 记录的字段赋值。其基本格式如下:记录的字段赋值。其基本格式如下: INSERT INTO 表名表名(列名列名1,列名列名2, ) VALUES(表达式表达式1,表达式表达式2, ) (2)UPDATE语句语句 UPDATE语句用于新的值更新表中的记录。其基本格式语句用于新的值更新表中的记录。其基本格式 如下:如下: UPDATE 表名表名 SET 列名列名1 = 表达式表达式1 ,SET 列名列名2 = 表达式表达式2 WHERE 条件表达式条件表

8、达式 (3)DELETE语句语句 DELETE语句用于删除记录,其基本格式如下:语句用于删除记录,其基本格式如下: DELETE FROM 表名表名 WHERE 条件表达式条件表达式 4. 数据查询语句数据查询语句 SQL的数据查询语句是使用很频繁的语句。的数据查询语句是使用很频繁的语句。SELECT的的 基本格式如下:基本格式如下: SELECT 字段字段表表/指定要查询的内容。指定要查询的内容。 FORM 表表名名/指定从其中选定记录的表名指定从其中选定记录的表名 WHERE 查询查询条件条件/指定所选记录必须满足的条件指定所选记录必须满足的条件 GROUP BY 分组分组字段字段/把选定

9、的记录分成特定的组把选定的记录分成特定的组 HAVING 分组分组条件条件/说明每个组需要满足的条件说明每个组需要满足的条件 ORDER BY 字段字段ASC|DESC/按特定的次序将记录排序按特定的次序将记录排序 聚合函数聚合函数说明说明聚合函数聚合函数说明说明 AVG 返回特定字段中值的平均返回特定字段中值的平均 数数 MAX 返回特定字段中的返回特定字段中的 最大值最大值 COUNT返回选定记录的个数返回选定记录的个数MIN 返回特定字段中的返回特定字段中的 最小值最小值 SUM 返回特定字段中所有值的返回特定字段中所有值的 总和总和 关系关系运算符运算符说明说明关系运算符关系运算符 说

10、明说明 小于小于不等于不等于 大于大于IN (一组值)(一组值) 在一组值在一组值 中中 =大于等于大于等于LIKE*与一个通配符匹配与一个通配符匹配 【例例12.4】 查询查询student表中表中“09002”班所有学生记录。班所有学生记录。 SELECT * FROM student WHERE 班号班号=09002 SELECT student.学号学号,student.姓名姓名,score.课程名课程名,score.分数分数 FROM student,score WHERE student.学号学号=score.学号学号 ORDER BY score.课程名课程名 【例例12.6】

11、查询所有学生的学号、姓名、课程名和分查询所有学生的学号、姓名、课程名和分 数,要求按课程名排序。数,要求按课程名排序。 【例例12.7】 查询分数在查询分数在8090之间的所有学生的学号、之间的所有学生的学号、 姓名、课程名和分数。姓名、课程名和分数。 SELECT student.学号学号,student.姓名姓名,score.课程名课程名,score.分数分数 FROM student,score WHERE student.学号学号=score.学号学号 AND score.分数分数 BETWEEN 80 AND 90 【例例12.8】 查询每个班每门课程的平均分。查询每个班每门课程的平

12、均分。 SELECT student.班号班号,score.课程名课程名,AVG(score.分数分数) AS 平均分平均分 FROM student,score WHERE student.学号学号=score.学号学号 GROUP BY student.班号班号,score.课程名课程名 【例例9.9】 查询最高分的学生姓名和班号。查询最高分的学生姓名和班号。 SELECT student.姓名姓名,student.班号班号 FROM student,score WHERE student.学号学号=score.学号学号 AND score.分数分数=(SELECT MAX(分数分数) F

13、ROM score) ADO.NET是在是在.NET Framework上访问数据库的一组上访问数据库的一组 类库,它利用类库,它利用.NET Data Provider(数据提供程序)以进(数据提供程序)以进 行数据库的连接与访问。行数据库的连接与访问。 通过通过ADO .NET,数据库程序设计人员能够很轻易地,数据库程序设计人员能够很轻易地 使用各种对象来访问符合自己需求的数据库内容。使用各种对象来访问符合自己需求的数据库内容。 12.2.1ADO.NET简介简介 12.2.2 ADO.NET体系结构体系结构 1. .NET Data Provider .NET Data Provider

14、是指访问数据源的一组类库,主是指访问数据源的一组类库,主 要是为了统一对于各类型数据源的访问方式而设计的一套要是为了统一对于各类型数据源的访问方式而设计的一套 高效能的类数据库。高效能的类数据库。 下表给出了下表给出了.NET Data Provider中包含的中包含的4个对象。个对象。 对象名称对象名称功能说明功能说明 Connection提供和数据源的连接功能。提供和数据源的连接功能。 Command提供运行访问数据库命令,传送数据或修改数据的功能,提供运行访问数据库命令,传送数据或修改数据的功能, 例如运行例如运行SQL命令和存储过程等。命令和存储过程等。 DataAdapter是是Da

15、taSet对象和数据源间的桥梁。对象和数据源间的桥梁。DataAdapter使用使用4 个个Command对象来运行查询、新建、修改、删除的对象来运行查询、新建、修改、删除的 SQL命令,把数据加载到命令,把数据加载到DataSet,或者把,或者把DataSet内的内的 数据送回数据源。数据送回数据源。 DataReader通过通过Command对象运行对象运行SQL查询命令取得数据流,以查询命令取得数据流,以 便进行高速、只读的数据浏览。便进行高速、只读的数据浏览。 在在.NET Framework中常用的有如下中常用的有如下4组数据提供程序:组数据提供程序: (1)SQL.NET Data

16、 Provider (2)OLEDB.NET Data Provider (3)ODBC.NET Data Provider (4)ORACLE.NET Data Provider 2. DataSet DataSet(数据集)是(数据集)是ADO .NET离线数据访问模型中离线数据访问模型中 的核心对象,主要使用时机是在内存中暂存并处理各种从的核心对象,主要使用时机是在内存中暂存并处理各种从 数据源中所取回的数据。数据源中所取回的数据。 DataSet其实就是一个存放在内存中的数据暂存区,这其实就是一个存放在内存中的数据暂存区,这 些数据必须通过些数据必须通过DataAdapter对象与数据

17、库进行数据交换。对象与数据库进行数据交换。 在在DataSet内部允许同时存放一个或多个不同的数据表内部允许同时存放一个或多个不同的数据表 (DataTable)对象)对象。 ADO.NET数据库访问的一般流程如下数据库访问的一般流程如下: 12.2.3 ADO.NET数据库的访问流程数据库的访问流程 建立建立Connection对象,创建一个数据库连接。对象,创建一个数据库连接。 在建立连接的基础上可以使用在建立连接的基础上可以使用Command对象对数据库发送查对象对数据库发送查 询、新增、修改和删除等命令。询、新增、修改和删除等命令。 创建创建DataAdapter对象,从数据库中取得数

18、据。对象,从数据库中取得数据。 创建创建DataSet对象,将对象,将DataAdapter对象填充到对象填充到DataSet对象对象 (数据集)中。(数据集)中。 如果需要,可以重复操作,一个如果需要,可以重复操作,一个DataSet对象可以容纳多个数对象可以容纳多个数 据集合。据集合。 关闭数据库。关闭数据库。 在在DataSet上进行所需要的操作。为了将一个上进行所需要的操作。为了将一个DataSet数据集的数据集的 数据输出到窗体中或者网页上,需要设定数据显示控件的数据数据输出到窗体中或者网页上,需要设定数据显示控件的数据 源为该数据集。源为该数据集。 在数据访问中首先必须是建立数据库

19、的物理连接。在数据访问中首先必须是建立数据库的物理连接。 .NET Data Provider使用使用SqlConnection类的对象标识与类的对象标识与 一个数据库的物理连接。一个数据库的物理连接。 12.3.1 SqlConnection对象对象 1. SqlConnection类类 SqlConnection类的属性类的属性说明说明 ConnectionString获取或设置用于打开数据库的字符串。获取或设置用于打开数据库的字符串。 ConnectionTimeout获取在尝试建立连接时终止尝试并生成错误之前获取在尝试建立连接时终止尝试并生成错误之前 所等待的时间。所等待的时间。 Da

20、tabase获取当前数据库或连接打开后要使用的数据库的获取当前数据库或连接打开后要使用的数据库的 名称。名称。 DataSource获取数据源的服务器名或文件名。获取数据源的服务器名或文件名。 Provider获取在连接字符串的获取在连接字符串的“Provider=”子句中指定的子句中指定的 SQL提供程序的名称。提供程序的名称。 State获取连接的当前状态。获取连接的当前状态。 SqlConnection类的方法类的方法说明说明 Open使用使用 ConnectionString 所指定的属性设置打开数据库连接。所指定的属性设置打开数据库连接。 Close关闭与数据库的连接。这是关闭任何打

21、开连接的首选方法。关闭与数据库的连接。这是关闭任何打开连接的首选方法。 CreateCommand创建并返回一个与创建并返回一个与 SqlConnection 关联的关联的SqlCommand 对对 象。象。 ChangeDatabase为打开的为打开的SqlConnection 更改当前数据库。更改当前数据库。 2. 建立连接字符串建立连接字符串ConnectionString 建立连接字符串的方式是:先创建一个建立连接字符串的方式是:先创建一个SqlConnection对象,对象, 将其将其ConnectionString属性设置为如下值:属性设置为如下值: Data Source=LCB

22、-PCSQLEXPRESS;Initial Catalog=Stud; User ID=sa;Password=12345 ConnectionString中的常用的关键字值有效名称如下:中的常用的关键字值有效名称如下: 在指定连接字符串后,最后用在指定连接字符串后,最后用Open方法打开连接。方法打开连接。 Data Source:指定要连接的:指定要连接的SQL Server实例名或网络地址。上述连实例名或网络地址。上述连 接字符串中接字符串中“LCB-PCSQLEXPRESS”就是就是SQL Server的一个实例。的一个实例。 Initial Catalog(或(或Database):

23、指定要连接的数据库名称。上述连):指定要连接的数据库名称。上述连 接字符串中要连接的数据库为接字符串中要连接的数据库为Stud。 Integrated Security(或(或Trusted_Connection):当为):当为False(默认值)(默认值) 时,将在连接中指定用户时,将在连接中指定用户ID和密码;当为和密码;当为True时,将使用当前的时,将使用当前的 Windows帐户凭据进行身份验证。帐户凭据进行身份验证。 Persist Security Info:当该值设置为:当该值设置为False(默认值)或(默认值)或no(强烈推(强烈推 荐)时,如果连接是打开的或者一直处于打开

24、状态,那么安全敏感荐)时,如果连接是打开的或者一直处于打开状态,那么安全敏感 信息(如密码)将不会作为连接的一部分返回。重置连接字符串将信息(如密码)将不会作为连接的一部分返回。重置连接字符串将 重置包括密码在内的所有连接字符串值。重置包括密码在内的所有连接字符串值。 User ID:指定:指定SQL Server的登录帐户。的登录帐户。 Password(或(或Pwd):指定):指定SQL Server帐户登录的密码。帐户登录的密码。 【例例12.10】 设计一个采用直接建立连接字符串实现设计一个采用直接建立连接字符串实现Stud数数 据库连接的网页据库连接的网页WebForm1.aspx。

25、 解:解:其设计步骤如下:其设计步骤如下: 在在ch10网站添加一个代码隐藏页模型的网站添加一个代码隐藏页模型的WebForm1空网页。空网页。 其设计界面如图其设计界面如图12.14所示,其中包含一个所示,其中包含一个Button控件控件Button1和一个和一个 标签标签Label1,将该网页的,将该网页的StyleSheetTheme属性设置为属性设置为Blue。 在该网页上设计如下事件过程在该网页上设计如下事件过程: using System.Data.SqlClient;/网页代码页新增的引用网页代码页新增的引用 protected void Button1_Click(object

26、 sender, EventArgs e) SqlConnection myconn = new SqlConnection(); string mystr = Data Source=LCB-PCSQLEXPRESS; Initial Catalog=Stud;User ID=sa;Password=12345; myconn.ConnectionString = mystr; myconn.Open(); if (myconn.State = System.Data.ConnectionState.Open) Label1.Text = 成功连接到成功连接到SQL Server数据库数据库

27、; else Label1.Text = 不能连接到不能连接到SQL Server数据库数据库; myconn.Close(); 运行界面运行界面 3. 将连接字符串存放在将连接字符串存放在Web.config文件中文件中 可以在可以在Web.config文件中保存用于连接数据库的连接字符文件中保存用于连接数据库的连接字符 串,再通过对串,再通过对Web.config文件加密,从而达到保护连接字符文件加密,从而达到保护连接字符 串的目的。例如,在串的目的。例如,在节中插入以下代码节中插入以下代码: 这样,以下代码自动获取这样,以下代码自动获取Web.config文件中的连接字符串文件中的连接字

28、符串 myconnstring: string mystr = System.Configuration.ConfigurationManager. ConnectionStringsmyconnstring.ToString(); SqlConnection myconn = new SqlConnection(); myconn.ConnectionString = mystr; myconn.Open(); 建立建立数据连接之后,就可以执行数据访问操作和数据操纵数据连接之后,就可以执行数据访问操作和数据操纵 操作了。一般对数据库的操作被概括为操作了。一般对数据库的操作被概括为CRUDCr

29、eate、 Read、Update和和Delete。在。在ADO.NET中定义中定义SqlCommand 类类 去执行这些操作。去执行这些操作。 12.3.2 SqlCommand 对象对象 SqlCommand 类的属性类的属性说明说明 CommandText获取或设置要对数据源执行的获取或设置要对数据源执行的 T-SQL 语句或存储过程。语句或存储过程。 CommandTimeout获取或设置在终止执行命令的尝试并生成错误之前的等获取或设置在终止执行命令的尝试并生成错误之前的等 待时间。待时间。 CommandType获取或设置一个值,该值指示如何解释获取或设置一个值,该值指示如何解释Co

30、mmandText属属 性。性。 Connection数据命令对象所使用的连接对象数据命令对象所使用的连接对象 Parameters参数集合(参数集合(SqlParameterCollection) 1. SqlCommand 类的属性和方法类的属性和方法 SqlCommand 类的方法类的方法说明说明 CreateParameter 创建创建SqlParameter对象的新实例。对象的新实例。 ExecuteNonQuery 针对针对Connection 执行执行SQL语句并返回受影响的行数。语句并返回受影响的行数。 ExecuteReader 将将CommandText发送到发送到Conn

31、ection并生成一个并生成一个 SqlDataReader。 ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一执行查询,并返回查询所返回的结果集中第一行的第一 列。忽略其他列或行。列。忽略其他列或行。 2. 创建创建SqlCommand 对象对象 SqlCommand 类的主要构造函数如下:类的主要构造函数如下: SqlCommand (); SqlCommand (cmdText); SqlCommand (cmdText,connection); 其中,其中,cmdText参数指定查询的文本。参数指定查询的文本。connection参数是一个参数是一个 Sql

32、Connection,它表示到,它表示到SQL Server数据库的连接。数据库的连接。 例如例如,以下语句创建一个,以下语句创建一个SqlCommand 对象对象mycmd: string mystr = System.Configuration.ConfigurationManager. ConnectionStringsmyconnstring.ToString(); myconn.ConnectionString = mystr; myconn.Open(); SqlCommand mycmd = new SqlCommand(SELECT * FROM student, myconn

33、); 3. 通过通过SqlCommand 对象返回单个值对象返回单个值 在在SqlCommand 的方法中,的方法中,ExecuteScalar方法执行返回方法执行返回 单个值的单个值的SQL命令。命令。 例如,如果想获取例如,如果想获取Student数据表中学生的总人数,则数据表中学生的总人数,则 可以使用这个方法执行可以使用这个方法执行SQL查询:查询: SELECT Count(*) FROM student 【例例12.11】 设计一个通过设计一个通过SqlCommand对象求对象求score表中表中 的所有学生平均分的网页的所有学生平均分的网页WebForm2。 解:解:其设计步骤如

34、下:其设计步骤如下: 在在ch12网站添加一个代码隐藏页模型的网站添加一个代码隐藏页模型的WebForm2空网页。空网页。 其设计界面如图其设计界面如图12.16所示,其中包含一个所示,其中包含一个HTML标签、一个文本标签、一个文本 框框TextBox1和一个和一个Button控件控件Button1。 在该网页上设计如下事件过程:在该网页上设计如下事件过程: protected void Button1_Click(object sender, EventArgs e) string mystr, mysql; SqlConnection myconn = new SqlConnection

35、(); SqlCommand mycmd = new SqlCommand(); mystr = System.Configuration.ConfigurationManager. ConnectionStringsmyconnstring.ToString(); myconn.ConnectionString = mystr; myconn.Open(); mysql = SELECT AVG(分数分数) FROM score; mycmd.CommandText = mysql; mycmd.Connection = myconn; TextBox1.Text = mycmd.Execu

36、teScalar().ToString(); myconn.Close(); 网页运行界面网页运行界面 4. 通过通过SqlCommand 对象执行修改操作对象执行修改操作 在在SqlCommand 的方法中,的方法中,ExecuteNonQuery方法执行方法执行 不返回结果的不返回结果的SQL命令。命令。 该方法主要用来更新数据,通常使用它来执行该方法主要用来更新数据,通常使用它来执行UPDATE、 INSERT和和DELETE语句。语句。 该方法不返回行,对于该方法不返回行,对于UPDATE、INSERT和和DELETE语语 句,返回值为该命令所影响的行数,对于所有其他类型的语句,返回值

37、为该命令所影响的行数,对于所有其他类型的语 句,返回值为句,返回值为-1。 【例例12.12】 设计一个通过设计一个通过SqlCommand对象将对象将score表中表中 所有分数增所有分数增5分和减分和减5分的网页分的网页WebForm3。 解:解:其设计步骤如下:其设计步骤如下: 在在ch12网站添加一个代码隐藏页模型的网站添加一个代码隐藏页模型的WebForm3空网页。空网页。 其设计界面如图其设计界面如图12.18所示,其中包含两个命令按钮控件(所示,其中包含两个命令按钮控件(Button1 和和Button2)和一个标签)和一个标签Label1。 网页设计界面网页设计界面 在该网页上

38、设计如下事件过程:在该网页上设计如下事件过程: public partial class WebForm3 : System.Web.UI.Page SqlCommand mycmd = new SqlCommand();/类字段类字段 SqlConnection myconn = new SqlConnection();/类字段类字段 protected void Page_Load(object sender, EventArgs e) string mystr = System.Configuration.ConfigurationManager. ConnectionStringsmy

39、connstring.ToString(); myconn.ConnectionString = mystr; myconn.Open(); protected void Page_Unload() myconn.Close();/关闭本网页时关闭连接关闭本网页时关闭连接 protected void Button1_Click(object sender, EventArgs e) string mysql = UPDATE score SET 分数分数=分数分数+5; mycmd.CommandText = mysql; mycmd.Connection = myconn; mycmd.E

40、xecuteNonQuery(); Label1.Text = 所有学生分数均增加所有学生分数均增加5分分; protected void Button2_Click(object sender, EventArgs e) string mysql = UPDATE score SET 分数分数=分数分数-5; mycmd.CommandText = mysql; mycmd.Connection = myconn; mycmd.ExecuteNonQuery(); Label1.Text = 所有学生分数均减少所有学生分数均减少5分分; 运行本网页,单击运行本网页,单击“分数分数+5”命令按

41、钮,此时命令按钮,此时score表表 中所有分数都增加中所有分数都增加5分,其运行界面如图分,其运行界面如图12.19所示。为了保所示。为了保 持持score表不变,再单击表不变,再单击“分数分数-5”命令按钮,此时命令按钮,此时score表表 中所有分数都恢复成原来的数据。中所有分数都恢复成原来的数据。 5. 在在SqlCommand 对象的命令中指定对象的命令中指定参数参数 其主要流程如下:其主要流程如下: 创建创建Connection对象,并设置相应的属性值。对象,并设置相应的属性值。 打开打开Connection对象。对象。 创建创建Command对象并设置相应的属性值,其中对象并设置

42、相应的属性值,其中SQL语句参语句参 数使用参数名称。数使用参数名称。 创建参数对象,将建立好的参数对象添加到创建参数对象,将建立好的参数对象添加到Command对象对象 的的Parameters集合中。集合中。 为参数对象赋值。为参数对象赋值。 执行数据命令。执行数据命令。 关闭相关对象。关闭相关对象。 例如,下面的更新语句:例如,下面的更新语句: UPDATE course SET cName = Name WHERE cID = ID 其中其中course是一个课程表,有是一个课程表,有cID(课程号)和(课程号)和cName(课(课 程名)两个列。该命令是将指定程名)两个列。该命令是将

43、指定cID的课程记录的的课程记录的cName替换替换 成指定的值。其中成指定的值。其中ID和和Name均为参数,在执行该语句之均为参数,在执行该语句之 前需要为参数赋值。前需要为参数赋值。 可以使用以下命令向可以使用以下命令向Parameters参数集合中添加参数值:参数集合中添加参数值: mycmd.Parameters.Add(Name,SqlType.VarChar,10).Value = Name1; mycmd.Parameters.Add(ID, SqlType.VarChar,5).Value = ID1; 【例例12.13】 设计一个通过设计一个通过SqlCommand对象求出

44、指定学号学对象求出指定学号学 生的平均分的网页生的平均分的网页WebForm4。 解:解:其设计步骤如下:其设计步骤如下: 在在ch12网站添加一个代码隐藏页模型的网站添加一个代码隐藏页模型的WebForm4空网页。空网页。 其设计界面如图其设计界面如图12.20所示,其中包含两个所示,其中包含两个HTML标签、两个文本框标签、两个文本框 (TextBox1和和TextBox2)和一个)和一个Button控件控件Button1。 网页设计界面网页设计界面 在该网页上设计如下事件过程:在该网页上设计如下事件过程: protected void Button1_Click(object sende

45、r, EventArgs e) SqlConnection myconn = new SqlConnection(); SqlCommand mycmd = new SqlCommand(); string mystr = System.Configuration.ConfigurationManager. ConnectionStringsmyconnstring.ToString(); myconn.ConnectionString = mystr; myconn.Open(); string mysql = SELECT AVG(分数分数) FROM score WHERE 学号学号=n

46、o; mycmd.CommandText = mysql; mycmd.Connection = myconn; mycmd.Parameters.Add(no,System.Data.SqlDbType.VarChar,5).Value =TextBox1.Text; TextBox2.Text = mycmd.ExecuteScalar().ToString(); myconn.Close(); 网页运行界面网页运行界面 当执行返回结果集的命令时,需要一个方法从结果集当执行返回结果集的命令时,需要一个方法从结果集 中提取数据。处理结果集的方法有两个:中提取数据。处理结果集的方法有两个: (

47、1)使用)使用SqlDataReader对象(数据阅读器);对象(数据阅读器); (2)同时使用)同时使用SqlDataAdapter对象(数据适配器)和对象(数据适配器)和 DataSet对象。对象。 12.3.3 SqlDataReader对象对象 1. SqlDataReader类的属性和方法类的属性和方法 属性属性说明说明 FieldCount获取当前行中的列数获取当前行中的列数 IsClosed获取一个布尔值,指出获取一个布尔值,指出SqlDataReader对象是否关闭对象是否关闭 RecordsAffected获取执行获取执行SQL语句时修改的行数语句时修改的行数 方法方法说明说

48、明 Read将将SqlDataReader对象前进到下一行并读取,返回布尔值指示是否对象前进到下一行并读取,返回布尔值指示是否 有多行有多行 Close关闭关闭SqlDataReader对象对象 IsDBNull返回布尔值,表示列是否包含返回布尔值,表示列是否包含NULL值值 NextResult将将SqlDataReader对象移到下一个结果集,返回布尔值指示该结果对象移到下一个结果集,返回布尔值指示该结果 集是否有多行集是否有多行 GetBoolean返回指定列的值,类型为布尔值返回指定列的值,类型为布尔值 GetString返回指定列的值,类型为字符串返回指定列的值,类型为字符串 Get

49、Byte返回指定列的值,类型为字节返回指定列的值,类型为字节 GetInt32返回指定列的值,类型为整型值返回指定列的值,类型为整型值 GetDouble返回指定列的值,类型为双精度值返回指定列的值,类型为双精度值 GetDataTime返回指定列的值,类型为日期时间值返回指定列的值,类型为日期时间值 GetOrdinal返回指定列的序号或数字位置(首列序号为返回指定列的序号或数字位置(首列序号为0) GetBoolean返回指定列的值,类型为对象返回指定列的值,类型为对象 2. 创建创建SqlDataReader对象对象 在在ADO.NET中从来不会显式的使用中从来不会显式的使用SqlDat

50、aReader对象的构对象的构 造函数创建的造函数创建的SqlDataReader对象。对象。SqlDataReader类没有提供公类没有提供公 有的构造函数。人们通常调用有的构造函数。人们通常调用Command类的类的ExecuteReader方法,方法, 这个方法将返回一个这个方法将返回一个DataReader对象。对象。 例如,以下代码创建一个例如,以下代码创建一个SqlDataReader对象对象myreader: SqlCommand cmd = new SqlCommand (CommandText,ConnectionObject); SqlDataReader myreader

51、 = cmd.ExecuteReader(); 注意:注意:SqlDataReader对象不能使用对象不能使用new来创建。来创建。 3. 遍历遍历SqlDataReader对象的记录对象的记录 当当ExecuteReader方法返回方法返回DataReader对象时,当前光标的对象时,当前光标的 位置是第一条记录的前面。必须调用位置是第一条记录的前面。必须调用SqlDataReader对象的对象的Read 方法把光标移动到第一条记录,然后,第一条记录将变成当前方法把光标移动到第一条记录,然后,第一条记录将变成当前 记录。记录。 经常使用经常使用while循环来遍历记录:循环来遍历记录: wh

52、ile (myreader.Read() /读取数据读取数据 只要只要Read方法返回的值为方法返回的值为true,就可以访问当前记录中包含,就可以访问当前记录中包含 的字段。的字段。 4访问字段中的值访问字段中的值 (1)Item属性属性 每一个每一个DataReader对象都定义了一个对象都定义了一个Item属性,此属性属性,此属性 返回一个代码字段属性的对象。返回一个代码字段属性的对象。Item属性是属性是DataReader对象对象 的索引。需要注意的是的索引。需要注意的是Item属性总是基于属性总是基于0开始编号的:开始编号的: myreaderFieldName myreaderF

53、ieldIndex (2)Get方法方法 每一个每一个DataReader对象都定义了一组对象都定义了一组Get方法,那些方法方法,那些方法 将返回适当类型的值。例如,将返回适当类型的值。例如,GetInt32方法把返回的字段值方法把返回的字段值 作为作为32位整数,每一个位整数,每一个Get方法都将接受字段的索引方法都将接受字段的索引。 例如例如,在上面的例子中,使用以下的代码可以检索,在上面的例子中,使用以下的代码可以检索ID字字 段和段和cName字段的值:字段的值: myreader.GetInt32(0) myreader.GetString(1) 【例例12.14】 设计一个通过设

54、计一个通过SqlDataReader对象在一个列表对象在一个列表 框中输出所有学生记录的网页框中输出所有学生记录的网页WebForm5。 解:解:其设计步骤如下:其设计步骤如下: 在在ch12网站添加一个代码隐藏页模型的网站添加一个代码隐藏页模型的WebForm5空网页。空网页。 其设计界面如图其设计界面如图12.22所示,其中包含一个列表框所示,其中包含一个列表框ListBox1和一个和一个 Button控件控件Button1。 网页设计界面网页设计界面 在该网页上设计如下事件过程:在该网页上设计如下事件过程: protected void Button1_Click(object send

55、er, EventArgs e) string mystr,mysql; SqlConnection myconn = new SqlConnection(); SqlCommand mycmd = new SqlCommand(); mystr = System.Configuration.ConfigurationManager. ConnectionStringsmyconnstring.ToString(); myconn.ConnectionString = mystr; myconn.Open(); mysql = SELECT * FROM student; mycmd.Comm

56、andText = mysql; mycmd.Connection = myconn; SqlDataReader myreader = mycmd.ExecuteReader(); ListBox1.Items.Add(学号学号 姓名姓名 性别性别 民族民族 班号班号); ListBox1.Items.Add(=); while (myreader.Read()/循环读取信息循环读取信息 ListBox1.Items.Add(String.Format(0 1 2 3 4, myreader学号学号.ToString(), myreader1.ToString(), myreader2.To

57、String(), myreader3.ToString(), myreader4.ToString(); myconn.Close(); myreader.Close(); 网页运行界面网页运行界面 SqlDataAdapter对象(数据适配器)可以执行对象(数据适配器)可以执行SQL命令以命令以 及调用存储过程、传递参数,最重要的是取得数据结果集,及调用存储过程、传递参数,最重要的是取得数据结果集, 在数据库和在数据库和DataSet对象之间来回传输数据。对象之间来回传输数据。 数据库数据库DataSet对象对象 SqlDataAdapter对象对象 12.3.4 SqlDataAdapt

58、er对象对象 属性属性说明说明 SelectCommand获取或设置获取或设置SQL语句用于选择数据源中的记录。该值为语句用于选择数据源中的记录。该值为 SqlCommand 对象对象 InsertCommand获取或设置获取或设置SQL语句用于将新记录插入到数据源中。该语句用于将新记录插入到数据源中。该 值为值为SqlCommand 对象对象 UpdateCommand获取或设置获取或设置SQL语句用于更新数据源中的记录。该值为语句用于更新数据源中的记录。该值为 SqlCommand 对象对象 DeleteCommand获取或设置获取或设置SQL语句用于从数据集中删除记录。该值为语句用于从数

59、据集中删除记录。该值为 SqlCommand 对象对象 AcceptChangesDuringFill获取或设置一个值,该值指示在任何获取或设置一个值,该值指示在任何Fill操作过程中时,操作过程中时, 是否接受对行所做的修改是否接受对行所做的修改 AcceptChangesDuringUpdate获取或设置在获取或设置在Update期间是否调用期间是否调用AcceptChanges FillLoadOption获取或设置获取或设置LoadOption,后者确定适配器如何从,后者确定适配器如何从 SqlDataReader中填充中填充DataTable MissingMappingAction

60、确定传入数据没有匹配的表或列时需要执行的操作确定传入数据没有匹配的表或列时需要执行的操作 MissingSchemaAction确定现有确定现有DataSet架构与传入数据不匹配时需要执行的操架构与传入数据不匹配时需要执行的操 作作 TableMappings获取一个集合,它提供源表和获取一个集合,它提供源表和DataTable之间的主映射之间的主映射 1. SqlDataAdapter类的属性和方法类的属性和方法 方法方法说明说明 Fill用来自动执行用来自动执行SqlDataAdapter对象的对象的SelectCommand属性中属性中 相对应的相对应的SQL语句,以检索数据库中的数据,

温馨提示

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

评论

0/150

提交评论