一直分不清这三种方法的具体用法现在终于找齐了

ExecuteNonQuery方法和ExecuteScalar方法和ExecuteReader方法的区别

(1)ExecuteNonQuery():执行命令对象的SQL语句,返回一个int类型变量,如果SQL语句是对数据库的记录进行操作(如记录的增加、删除和更新),那么方法将返回操作所影响的记录条数。

(2)ExecuteScalar():执行命令对象的SQL语句,如果SQL语句是SELECT查询,则仅仅返回查询结果集中的第1行第1列,而忽略其他的行和列。该方法所返回的结果为object类型,在使用之前必须强制转换为所需的类型。如果SQL语句不是SELECT查询,则返回结果没有任何作用。

------【分析】
命令对象的ExecuteNonQuery()方法用于执行任何不从数据库返回结果集的SQL操作命令,包括INSERT INTO、UPDATE、DELETE语句、没有返回数值的存储过程、CREATE TABLE和CREATEINDEX之类的DDL语句。ExecuteNonQuery方法还可用来执行目录操作,例如查询数据库的结构或创建诸如表等的数据库对象。ExecuteNonQuery方法对于UPDATE、INSERT INTO和DELETE这些操作语句,其返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,返回值也为-1。
假设cmd为SQL SERVER数据提供者的命令对象(即SqlCommand),cn为连接对象(保持打开状态),调用ExecuteNonQuery方法如以下代码所示。
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
//设置cmd的命令文本,本例为删除Table1表中id字段值大于1的记录
cmd.CommandText = “DELETE FROM Table1 WHERE [id]>1”;
int count = cmd.ExecuteNonQuery();
以上代码中,创建了SqlCommand类型的命令对象cmd,设置其连接为连接对象cn,SQL命令文本为某个SQL语句(一般为增、删、改命令)。执行ExecuteNonQuery方法后,命令文本即通过连接对象作用到数据库中,其返回值count则为数据库中受到影响的数据记录数量。
命令对象的ExecuteScalar()方法由于只能返回数据集的第1行第1列,所以常被用于执行聚合函数。假设cmd为SQL SERVER数据提供者的命令对象(即SqlCommand),cn为连接对象(保持打开状态),调用ExecuteScalar方法如以下代码所示。
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
//设置cmd的命令文本,本例为查询Table1表中记录的数量
cmd.CommandText = “SELECT COUNT(*) FROM Table1”;
int count = (int)cmd.ExecuteScalar();

以上代码中,创建了SqlCommand类型的命令对象cmd,设置其连接为连接对象cn,SQL命令文本为某个SQL语句。由于返回值为object类型,所以需要进行强制转换,count变量即存储了所需数据表中记录的数量。

(3)ExecuteReader():我们通常在asp中用Recordset对象来从数据库中读出数据,并且用
循环语句来一个一个的读出数据,但在我们的ADO.NET中,我们就是用DataReader 对象的
ExecuteReader()方法来进行数据的列出,并且我们用这个ExecuteReader()方法来显示数据
是最快的一种方法,因为当我们在用ExecuteReader()方法中的DataReader 对象来进行数据
的在网站建设中显示时,他只可以一条一条向前读,不能返回,也就是像ASP中的ADO方法
中的Recordset 对象的Movenext一样,他没有move -1这样的返回方法。
说明:如果没有数据可操作,那么只能使用调用命令对象的ExecuteReader方法,返回一个数据读取器(DataReader对象)。因为 ExecuteNonQuery()与ExecuteScalar()在没有数据的时候调用时,就会出现“对象没有实例化”的错误。所以在判断是否有数据时,应该调用数据读取器的Read()方法来检测。

SqlServer数据库的一些方法的用途的更多相关文章

  1. SQLServer数据库及注入方法

    目录 SQLServer数据库 SQLServer数据库的查询语句 SA权限开启xp_cmdshell获取主机权限 盲注SQLServer数据库 SQLServer数据库 SQL Server数据库是 ...

  2. SQLServer数据库字典维护方法

    启用SQLServer启用管理器,以2008为例 1.设置表信息描述 选中要设置的表,右键点击“属性” . 选择扩展属性 填写要求: 名称:MS_Description 值: 模块名称-表名称 修改语 ...

  3. SQLSERVER数据库迁移的方法

    数据库迁移两种方案:https://www.cnblogs.com/mcgrady/p/7614491.html 方案一 1,先将源服务器上的数据库文件打包(包括mdf和ldf文件),并且复制到目标服 ...

  4. 获取sqlserver数据库中所有库、表、字段名的方法

    获取sqlserver数据库中所有库.表.字段名的方法 2009年03月12日 星期四 下午 12:51 1.获取所有数据库名: SELECT Name FROM Master..SysDatabas ...

  5. 设置SQLServer数据库中某些表为只读的多种方法

    原文:设置SQLServer数据库中某些表为只读的多种方法 翻译自:http://www.mssqltips.com/sqlservertip/2711/different-ways-to-make- ...

  6. 命令行下从bak文件恢复sqlserver数据库方法

    命令行下从bak文件恢复sqlserver数据库方法 注:本文所示访问从SqlServer 2000 - 2014版都是通用的 参考:http://blog.sina.com.cn/s/blog_5c ...

  7. SqlServer数据库全角和半角互转的方法

    ---摘要: SqlServer数据库全角和半角互转的方法 CREATE FUNCTION f_Convert( @str NVARCHAR(4000), --要转换的字符串 @flag bit -- ...

  8. Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform

    Expression构建DataTable to Entity 映射委托   1 namespace Echofool.Utility.Common { 2 using System; 3 using ...

  9. python学习--python 连接SQLServer数据库(两种方法)

    1. python 学习.安装教程参照: http://www.runoob.com/python/python-tutorial.html 2. 集成开发环境 JetBrains PyCharm C ...

随机推荐

  1. win7 64下暗黑世界V1.1 服务器端及客户端的安装及运行 成功

    原地址:http://bbs.gameres.com/thread_223717.html 屌丝一枚,没有MAC 更没有XCODE 潜心整了星期六与星期天两天才安装运行成功...只能说安装太复杂了,, ...

  2. List中toArray()的使用方法

    当我们需要把一个链表中的元素放入数组时,jdk给我们提供了一种方法,也即运用toArray(),方法的使用如下: public class Test { public static void main ...

  3. ASP.NET MVC 入门3、Routing

    本系列文章基于Microsoft ASP.NET MVC Beta. 在一个route中,通过在大括号中放一个占位符来定义( { and } ).当解析URL的时候,符号"/"和& ...

  4. ANDROID_MARS学习笔记_S01原始版_020_Mp3player001_歌曲列表

    一.项目设计 二.歌曲列表简介 1.利用java.net.HttpURLConnection以流的形式下载xml文件为String 2.自定义ContentHandler-->Mp3ListCo ...

  5. 解读分库分表中间件Sharding-JDBC

    [编者按]数据库分库分表从互联网时代开启至今,一直是热门话题.在NoSQL横行的今天,关系型数据库凭借其稳定.查询灵活.兼容等特性,仍被大多数公司作为首选数据库.因此,合理采用分库分表技术应对海量数据 ...

  6. Android Integer.decode()和Intger.valueof()

    decode合适用来分析数字 可以分析 8进:010=>分析后为 8 10进:10=>分析后为 10 16进:#10|0X10|0x10=>分析后是 16 而valueof    只 ...

  7. 一个Redis实现的分布式锁

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.conne ...

  8. Sass占位符选择器`%`

    摘录自Understanding placeholder selectors. @extend @extend让你能够在多个选择器中通过继承的方式共享一段样式: .icon { transition: ...

  9. Spring AOP实现方式一【附源码】

    基本代理模式  纯POJO切面 源码结构: 1.首先我们新建一个接口,love 谈恋爱接口. package com.spring.aop; /** * 谈恋爱接口 * * @author Admin ...

  10. Linux内核中流量控制

    linux内核中提供了流量控制的相关处理功能,相关代码在net/sched目录下:而应用层上的控制是通过iproute2软件包中的tc来实现, tc和sched的关系就好象iptables和netfi ...