5.1.1 使用 ExecuteReader()操作数据库

Slides:



Advertisements
Similar presentations
Oracle. 数据操纵语言  数据操纵语言用于检索、插入和修改数据  数据操纵语言是最常见的 SQL 命令  数据操纵语言命令包括:  SELECT  INSERT  UPDATE  DELETE.
Advertisements

第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
第十章 Java 数据库编程. 内容提要 数据库有关概念; 介绍 JDBC 的结构; 重点介绍 JDBC 访问几种数据库的基本过程;
ADO.NET – 连接数据库. 2 课程地位 STB SQL Server XML PSPM ASP.NET Oracle OOAD Computer Base HTML&JavaScript OOP\Java C C SQL Base JSP/Servlet EJB/WebService C#
第 7 章 数据库 1. Overview  数据库概述  数据库管理系统  数据库的体系结构和数据库模型  SQL 语言  数据库技术  构建数据库系统 2.
第八单元 数据库MySQL应用基础 MySQL数据库应用基础 MySQ数据库操作使用 Mysql管理工具 第25章 数据库的增加/删除操作
SQL的简单查询.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
十一 ASP对数据库的访问.
第7章利用ADO.NET 进行数据访问.
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
ASP.NET 網頁製作教本 – 從基本語法學起
ADO .NET 簡介.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
第8章 设计数据库应用网站 本章讲述的主要内容 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL查询基础
新北市廠商聯合抗旱會議 104年3月23日.
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
第7章 数据库基础知识 SQL常用命令使用方法 (1) 数据记录筛选: sql="select * from 数据表
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
Chap 13 視界與資料庫程式設計.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
数据库应用与程序设计.
《计算机网络技术》 asp.net 程序设计 文本类控件 笪静.
第五讲 利用视图进行查询优化.
《ASP.NET数据库网站设计教程(C#版)》
第六章 學習SQL語言.
第 8 章 資料的 新增、修改與刪除.
課程名稱:資料庫系統 授課老師:李春雄 博士
Chapter 12 T-SQL 語法與 ASP.NET.
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
2018/11/23 面向对象与多线程综合实验-数据库操作 教师:段鹏飞.
ASP.NET 網頁製作教本 – 從基本語法學起
資料庫操作2.
ADO.NET.
主 讲 教 师:陆有军 Web技术与应用 第六章 ADO.NET 主 讲 教 师:陆有军
課程名稱:資料庫系統 授課老師:李春雄 博士
班級:博、碩子一甲 授課老師:鐘國家 助教:陳國政
第6章 ADO.NET数据访问接口 6.
上述代码规范了 INSERT 语句的编写规范,其中:
第7章 ADO.NET操作SQL Server数据库
讲课人:王璞 浙江工商职业技术学院.
5.5.1 存储过程的优点 ① 事务处理 ② 速度和性能 ③ 过程控制 ④ 安全性 ⑤ 减少网络流量和通信 ⑥ 模块化
1 创建SqlDataSouce控件 数据源控件(SqlDataSource)
操作数据库 C#程序设计课程组.
快递单模板的制作.
第十七章 資料庫SQL 17-1 SELECT 17-2 INSERT 17-3 UPDATE 17-4 DELETE.
第十二章 SQL語言簡介 講授大綱: 新增資料庫 新增資料表 新增資料 修改資料 刪除資料 查詢資料 透視ASP.NET-第12章
C# 程序设计教程 同济大学计算机系基础学科组
第 8 章 VB.NET与数据库应用程序 本章主要内容: ADO.NET体系结构; VB.NET与SQL Server数据库的连接;
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
第11章 ListView延迟加载效果 授课老师:高成珍 QQ号: QQ群: 、
第五讲 酒店客房管理系统(一) 教育部“十二五”职业教育国家规划教材
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
第十讲 学生成绩管理系统(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
普通高速模板的制作与调整.
3.2 Mysql 命令行 1 查看数据库 SHOW DATABASES; 2 创建一个数据库test1 CREATE DATABASE test1; 3 选择你所创建的数据库 USE test1; (按回车键出现Database changed 时说明操作成功!) 4 查看现在的数据库中存在什么表.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
SQL查询语句 蔡海洋.
1 Session对象的特性 Session 状态对象 Session 对象常用的方法有: Session 对象常用的属性有:
本讲内容 SQL 概述 SQL 的查询功能 SQL 的操作功能 SQL 的定义功能.
第三章 SQL Server数据管理.
Controls.
ASP.NET实用教程 清华大学出版社 第9章数据库应用 教学目标 教学重点 教学过程 2019年5月3日.
11 檢視表的建立 11-1 檢視表的基礎 11-2 建立檢視表 11-3 修改與刪除檢視表 11-4 編輯檢視表的內容.
C# 匿名委派 + Lambda + Func 建國科技大學 資管系 饒瑞佶.
MenuStrip by Szeto CY Visual C# 2008.
第4章 数据查询.
Web安全基础教程
Presentation transcript:

5.1.1 使用 ExecuteReader()操作数据库 使用 ExecuteReader() 操 作数据 库, ExecuteReader() 方法返回 的是一个 SqlDataReader 对象或 OleDbDataReader 对象。当使用 DataReader 对象时,不会像 DataSet 那样提供无连接的数据库副本, DataReader 类被设计为产生只读、只进的数据流。这些数据流都是从数据库返回的。所以,每次的访问 或操作只有一个记录保存在服务器的内存中。 相比与 DataSet 而言,DataReader 具有较快的访问能力,并且能够使用较少的服务器资源。DataReader 对象提供了“游标”形式的读取方法,当从结果中读取了一行,则“游标”会继续读取到下一行。通过 Read 方法可以判断数据是否还有下一行,如果存在数据,则继续运行并返回 true,否则返回 false。示例 代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); string strsql = "select * from mynews"; SqlCommand cmd = new SqlCommand(strsql, con); SqlDataReader rd = cmd.ExecuteReader(); while (rd.Read()) { Response.Write(rd["title"].ToString()); } //打开连接 //SQL 查询语句 //初始化 Command 对象 //初始化 DataReader 对象 //通过索引获取列

5.1.1 使用 ExecuteReader()操作数据库 DataReader 可以提高执行效率,有两种方式可以提高代码的性能,一种是基于序号的查询;第二种 情况则是使用适当的 Get 方法来查询。一般来说,在数据库的设计中,需要设计索引键或主键来标识, 在主键的设计中,自动增长类型是经常使用的,自动增长类型通常为整型,所以基于序号的查询可以使 用 DataReader,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); //设置连接字串 //创建连接对象 //打开连接 string strsql = "select * from mynews where id=1 order by id desc"; //按标识查询 SqlCommand cmd = new SqlCommand(strsql, con); SqlDataReader rd = cmd.ExecuteReader(); while (rd.Read()) { Response.Write(rd["title"].ToString()); } //创建 Command 对象 //创建 DataReader 对象 //遍历数据库 //读取相应行的信息

5.1.1 使用 ExecuteReader()操作数据库 当使用 ExecuteReader()操作数据库时,会遇到知道某列的名称而不知道某列的号的情况,这种情况 可以通过使用 DataReader 对象的 GetOrdinal()方法获取相应的列号。此方法接收一个列名并返回此列名 所在的列号,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字串 SqlConnection con = new SqlConnection(str); //创建连接对象 con.Open(); //打开连接 string strsql = "select * from mynews where id=1 order by id desc"; //创建执行 SQL 语句 SqlCommand cmd = new SqlCommand(strsql, con); SqlDataReader rd = cmd.ExecuteReader(); int id = rd.GetOrdinal("title"); while (rd.Read()) { Label1.Text = "新闻 id 是" + rd["id"]; } //创建 Command 对象 //创建 DataReader 对象 //使用 GetOrdinal 方法获取 title 列的列号 //遍历 DataReader 对象 //输出对象的值

5.1.1 使用 ExecuteReader()操作数据库 当完成数据库操作时,需要关闭数据库连接,DataReader 对象在调用 Close()方法即关闭与数据库的 连接,如果在没有关闭之前又打开另一个连接,系统会抛出异常。示例代码如下所示。 rd.Close(); //关闭 DataReader 对象 ExecuteReader()可以执行相应的 SQL 语句,例如插入、更新以及删除等,当需要执行插入、更新或 删除时,可以使用 ExecuteReader()进行数据操作,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); string strsql = "insert into mynews values ('执行更新后的标题')"; SqlCommand cmd = new SqlCommand(strsql, con); SqlDataReader rd = cmd.ExecuteReader(); while (rd.Read()) { Response.Write(rd["title"].ToString() + "<hr/>"); } rd.Close(); Response.Redirect("ExecuteReader.aspx"); //创建连接字串 //创建连接对象 //打开连接 //创建执行 SQL 语句 //创建 Command 对象 //使用 ExcuteReader()方法 //读取数据库 //关闭 DataReader 对象

5.1.1 使用 ExecuteReader()操作数据库 当执行了插入、删除等数据库操作时,ExecuteReader 返回为空的 DataReader 对象。当使用 Read 方 法遍历读取数据库时,并不会显示相应的数据信息,因为不是查询语句,则返回一个没有任何数据的System.Data.OleDb.OleDbDataReader 类型的集(EOF),但是 ExecuteReader 方法可以执行 SQL 语句。 如图所示。 使用 ExecuteReader()操作数据库,通常情况下是使用 ExecuteReader()进行数据库查询操作,使用 ExecuteReader()查询数据库能够提升查询效率,而如果需要进行数据库事务处理的话,ExecuteReader() 方法并不是理想的选择。

5.1.2 使用 ExecuteNonQuery()操作数据库 使用 ExecuteNonQuery()操作数据库时,ExecuteNonQuery()并不返回 DataReader 对象,返回的是一 个整型的值,代表执行某个 SQL 语句后,在数据库中影响的行数,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); string strsql = "select top 5 * from mynews order by id desc"; SqlCommand cmd = new SqlCommand(strsql, con); Label1.Text="该操作影响了"+cmd.ExecuteNonQuery()+"行"; //创建连接字串 //创建连接对象 //打开连接 //使用 ExecuteNonQuery //执行 SQL 语句并返回行 上述代码使用了 SELECT 语句,并执行语句,返回受影响的行数。运行后,发现返回的结果为-1, 说明,当使用 SELECT 语句时,并没有对任何行有任何影响。ExecuteNonQuery()通常情况下为数据库事 务处理的首选,当需要执行插入、删除、更新等操作时,首选 ExecuteNonQuery()。

5.1.2 使用 ExecuteNonQuery()操作数据库 对于更新、插入和删除的 SQL 句,ExecuteNonQuery()方法的返回值为该命令所影响的行数。对于 “CREATE TABLE”和“DROP TABLE”语句,返回值为 0,而对于所有其他类型的语句,返回值为-1。 ExecuteNonQuery()操作数据时,可以不使用 DataSet 直接更改数据库中的数据,示例代码如下所示。 protected void Button1_Click(object sender, EventArgs e) { string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); string strsql = "delete from mynews where id>4"; SqlCommand cmd = new SqlCommand(strsql, con); Label1.Text = "该操作影响了" + cmd.ExecuteNonQuery() + "行"; } //创建连接字串 //创建连接对象 //打开连接 //编写执行删除的 SQL 语句 //创建 Command 对象 //返回影响行数

5.1.2 使用 ExecuteNonQuery()操作数据库 运行上述代码后,会执行删除id号大于4的数据事务,当执行删除并删除完毕后, 则ExecuteNonQuery()方法返回受影响的行数,如图所示。 注意:有些项目中,通过判断 ExecuteNonQuery()的返回值来判断 SQL 语句是否执行成功,这样是 有失偏颇的,因为当使用创建表的语句时,就算执行成功也会返回-1。 ExecuteNonQuery()操作主要进行数据库操作,包括更新、插入和删除等操作,并返回相应的行数。 在进行数据库事务处理时或不需要DataSet为数据库进行更新时,ExecuteNonQuery()方法是数据操作的 首选。因为ExecuteNonQuery()支持多种数据库语句的执行。

5.1.3 使用 ExecuteScalar()操作数据库 ExecuteScalar()方法也用来执行SQL语句,但是 ExecuteScalar()执行SQL语句后的返回值与 ExecuteNonQuery()并不相同,ExecuteScalar()方法的返回值的数据类型是 Object 类型。如果执行的 SQL 语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,如果执行的 SQL 语句不是 一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示,示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); string strsql = "select * from mynews order by id desc"; SqlCommand cmd = new SqlCommand(strsql, con); Label1.Text = " 查询出了 Id 为" + cmd.ExecuteScalar() \; //创建连接字串 //创建连接对象 //打开连接 //使用 ExecuteScalar 查询

5.1.3 使用 ExecuteScalar()操作数据库 通常情况下 ExecuteNonQuery()操作后返回的是一个值,而 ExecuteScalar()操作后则会返回一个对象, ExecuteScalar()经常使用于当需要返回单一值时的情况。例如当插入一条数据信息时,常常需要马上知 道刚才插入的值,则可以使用 ExecuteScalar()方法。示例代码如下所示。 string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; SqlConnection con = new SqlConnection(str); con.Open(); string strsql = "insert into mynews values ('刚刚插入的 id 是多少?') SELECT @@IDENTITY as 'bh'"; SqlCommand cmd = new SqlCommand(strsql, con); Label1.Text = "刚 刚插入的行的 id 是" + cmd.ExecuteScalar(); //创建连接字串 //创建连接对象 //打开连接 //插入语句 //执行语句 //返回赋值 上述代码使用了SELECT@@IDENTITY 语法获取刚刚执行更新后的 id 值,然后通过使用ExecuteScalar()方法来获取刚刚更新后第一行第一列的值。

ExecuteXmlReader()返回 XmlReader 对象,XmlReader 特性如下所示: ExecuteXmlReader() 方法用于操作 XML 数据库,并返回一个 XmlReader 对象, 若需要使用 ExecuteXmlReader()方法,则必须添加引用 System.Xml。XmlReader 类似于 DataReader,都需要通过 Command 对象的 ExecuteXmlReader()方法来创建 XmlReader 的对象并初始化,示例代码如下所示。 XmlReader xdr = cmd.ExecuteXmlReader(); //创建 XmlReader 对象 ExecuteXmlReader()返回 XmlReader 对象,XmlReader 特性如下所示: XMLReader 是面向流的,它把 XML 文档看作是文本数据流。 XMLReader 是一个抽象类。 XMLReader 使用 pull 模式处理流。 三个派生类:XMLTextReader、XMLNodeReader 和 XMLValidatingReader string str = "server='(local)';database='mytable';uid='sa';pwd='sa'"; //创建连接字串 SqlConnection con = new SqlConnection(str); //创建连接对象 con.Open(); //打开连接 string strsql = "select * from mynews order by id desc FOR XML AUTO, XMLDATA"; SqlCommand cmd = new SqlCommand(strsql, con); //创建 Command 对象 XmlReader xdr = cmd.ExecuteXmlReader(); //创建 XmlReader 对象 Response.Write(xdr.AttributeCount); //读取节点个数 右述代码实现了获取当前节点中属性的个数。 上述代码使用了 SQL 语言中的 FOR XML AUTO,、XMLDATA 关键字,当执行 ExecuteXmlReader() 方法时,会返回 XmlReader 对象,若不指定 FOR XML AUTO,、XMLDATA 关键字,则系统会抛出异常。