也说ExecuteScalar和ExecuteNonQuery

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情



判断数据的存在性的时候
由于写sql的并不是非常规范,有时候用ExecuteScalar去执行查询的sql

select  column1,column2 …… from Table where ……   
 有时候用
select count(*) from table

后来发现因为程序出了点问题,才发现这里面的一些细节,又发现人家有这样的写法


Object obj=cmd.ExecuteScalar()
if(Object.Equals(obj,null))||Object.Equals(DBNull.Value,obj))
{
return null;
}
else
{
return obj;
}



就专门来研究研究这个ExecuteScalar返回值的问题,

ExecuteScalar就是返回第一行第一列,当你执行的sql为

select COUNT(*) from dbo.Table where Column='aaaa' 
的时候,他返回第一行第一列,这样的话,存在的话就是一个大于零 的树,不存在的话就是0,返回的obj肯定不为空,要想判断是否有统计数据的话,只能把这个obj转化为整数再判断其是否大于零,这里不需要判断obj是否为空,可以直接对其转化为整数,因为即使没有返回值,这个obj也为0(主要是我发现公司有人写代码就先判断是否为null,再转化为整数,假如你sql是统计信息的话,也就是select count 的话,返回的obj一定存在)

另外就是让当sql为

select  column1,column2 ……from Table where ……
的时候,去执行ExecuteScalar,这时依然返回的是第一行第一列,假如根据查询条件差选到数据存在,那么此时的返回值是什么情况呢?还要根据这个字段在数据库中是否存在来判断,假如在数据库中不为空那个这个obj就非空,也即if (obj == null)不成立,如果数据库中这个字段为空,在数据库中是null,
if (obj == null)依然不成立,但是if (obj == DBNull.Value)是成立的,但是书上为什么在
ExecuteScalar的返回值中加上(红字体部分)

if(Object.Equals(obj,null))||Object.Equals(DBNull.Value,obj)),

就不大理解了,你不能限制ExecuteScalar一定执行select count()的sql啊?
或许我去执行

select column1,column2 from Table where column3=‘*’

根据返回值情况去判断一个数据是否存在呢?(当然这样不大规范,一定要改正)


顺便记录一下,在数据库中把一个字段更新为'',也即

update Table set column1='' where column3='aaa'

那么查询这个字段的sql也即select column1 from table where column3=‘aaa’去执行ExecuteScalar,
if (obj == null)和if (obj == DBNull.Value)均不成立,说明数据库中‘’也是存在的



其实动手试试,结果就一目了然了


PS:最近很忙,累的头晕!!!


再PS:csdn博客编辑功能真是蛋疼



C#数据库四种执行方法(ExecuteNonQuery 目录 使用ExecuteNonQuery()操作数据库 使用ExecuteScalar()操作数据库 使用ExecuteReader()操作数据库 使用DataSet数据集插入记录,更新数据 使用ExecuteNonQuery()操作数据库 此方法通常情况下为数据库事务处理的首选,当需要执行插入、删除、修改等操作时,首选的就是ExecuteNonQuery()方法,该方法执行成功返回的是一受影响的行数,对于创建表(Create Table)删除表(Drop Table)语句,返回值是0,而对于 阅读详情

相关推荐

C#中ExecuteReader、ExecuteNonQueryExecuteScalar如何使用

敲完三层的Login DEMO后,DAL的SQL链接总是有BUG     总结总结C#链接数据库中ExecuteReader、ExecuteNonQueryExecuteScalar使用规范 一.ExecuteNonQuery:执行增,删,改的方法,支持存储过程 /// 连接字符串,自满足,请用SqlHelper.connString赋值 /// 参数1:命令类型,如果是sql

进击的巨人--小天贵 3165

C#中操作数据库技术之ExecuteNonQuery用法

ExecuteNonQuery方法主要用来更新数据,当然也可以用来执行目标操作(例如查询数据库的结构或者创建诸如表等的数据库对象)。通常用它来执行insert、update、delete语句,在不使用Dataset的情况下更改数据库中的数据。select语句不适合ExecuteNonQuery()方法。 一、首先,来看看ExecuteNonQuery的返回值:     1. 对于Update、...

lxn18392641463的博客 2万+

C#中ExecuteNonQuery()返回值注意点分析

本文实例讲述了C#中ExecuteNonQuery()返回值注意点。对于C#数据库程序设计有一定的借鉴价值。分享给大家供大家参考之用。具体分析如下: 首先,在查询某个表中是否有数据的时候,我们通常用ExecuteNonQuery(),并通过判断值是否大于0来判断数据的存在与否。结果与我所设想的很不一致,调试时才发现,其执行后返回的结果是-1,对此我很是不理解,回头查了下资料,如下显示: SqlCommand.ExecuteNonQuery 方法对连接执行 Transact-SQL 语句并返回受影响的行数。 备注:可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创

【机房重构】C#与数据库访问技术之ExecuteNonQuery方法介绍及实例、SQL注入问题

ExecuteNonQuery()方法介绍: 1.ExecuteNonQuery()方法是SqlCommand类的一个方法 2.ExecuteNonQuery方法主要用来更新数据。通常使用它来执行Update、InsertDelete语句。 返回值意义:  对于Update、InsertDelete语句,返回值为该命令所影响的行数。一般是大于0的整数,0明没有影响 ,-1表示执行出错。  对于所有其他类型的语句(如select),返回值为-1。 实现步骤: Comma.

Ariel_欢 1522

C#中ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法

using System.Data.SqlClient; ... SqlConnection conn = new SqlConnection(@"server=ws7\leosql;database=AdventureWorks;uid=sa;pwd=lixiang@"); try { conn.Open(); SqlCommand cmd = new SqlCommand("S...

qq_43857510的博客 8576

c#数据四种执行方法(ExecuteNonQuery

c#数据四种执行方法(ExecuteNonQuery) 1.使用ExecuteReader()操作数据库 2.使用ExecuteNonQuery()操作数据库 3.使用ExecuteScalar()操作数据库 4.使用DataSet数据集插入记录,更新数据 一、使用ExecuteReader()操作数据库,执行查询操作的非常好的方法。 ExecuteReader比DataSet而言,DataRea...

t13701275189的博客 1377

ExecuteNonQuery方法ExecuteScalar方法的区别

转自http://hi.baidu.com/shudaizi88/blog/item/34bb5b9bb79d7bbbc8eaf420.html   ----ExecuteNonQuery():执行命令对象的SQL语句,返回一个int类型变量,如果SQL语句是对数据库的记录进行操作(如记录的增加、删除更新),那么方法将返回操作所影响的记录条数。 ----ExecuteScalar():执行

水果篮子 2万+

浅谈ExecuteNonQuery方法ExecuteScalar方法ExecuteReader方法的使用

1)ExecuteNonQuery():执行命令对象的SQL语句,返回一个int类型变量,如果SQL语句是对数据库的记录进行操作(如记录的增加、删除更新),那么方法将返回操作所影响的记录条数。 下面为详细的解释运用: 命令对象的ExecuteNonQuery()方法用于执行任何不从数据库返回结果集的SQL操作命令,包括INSERT INTO、UPDATE、DELETE语句、没有返回数值的存储

gengyudan的专栏 1万+

SqlCommand.ExecuteNonQuerySqlCommand.ExecuteScalar的区别

SqlCommand.ExecuteScalar   执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。返回值是Object类型,一般插入的时候用该命令可以返回插入这条数据的自增ID使用 ExecuteScalar 方法从数据库中检索单个值(例如一个聚合值)。与

3137

ExecuteNonQuery ExecuteScalar使用方式

ExecuteScalar 结果集中第一行的第一列;如果结果集为空,则为空。 result = Convert.ToInt16( cmd.ExecuteScalar());   //若查询出来结果为空时,则是null,但是强转Int时会返回0哦 ExecuteNonQuery 对于 UPDATE、INSERT DELETE 语句,返回值为该命令所影响的行数。  如果正

Richard_dzh的专栏 931

ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReaderExecuteScalar方法

1、ExecuteNonQuery方法。 该方法执行更新操作,即与UPDATE、INSERT、DELETE等语句有关的操作,在这种情况下,返回值是命令影响的行数。对其他语句,如SET或CREATE,则返回-1,如果发生回滚,返回值也是-1。 2、ExcuteReader方法。 它与查询命令一起使用,返回一个数据阅读器对象SqlDataReader类的一个实例。该方法执行更新语句,执行成功

段琳琳 4992

ExecuteNonQuery();ExecuteReader();ExecuteScalar();的简单用法

     在连接SQL Server数据库:首先创建SqlConnection类SqlCommand类实例分别用于连接到SQL Server数据库执行SQL语句命令,然后打开数据连接并使用SqlCommand的相应方法执行SQL语句。ExecuteNonQuery()方法执行SQL语句并且不返回数据;ExecuteReader()方法将SQL语句发送给SqlConnection并生产一个Sql

心翼的专栏 7112

C#面:ExecuteScalar ExecuteNonQuery 的区别

ExecuteScalar ExecuteNonQuery 是ADO.NET中 SqlCommand 类的两个方法,用于执行 SQL 语句或存储过程。

那个那个鱼的博客 1862

executereader ExecuteScalar ExecuteNonQuery详解

ExecuteReader:可以读一个表的记录,只能读不能写ExecuteScalar:只能读一条记录,一般用来判断数据库是否有数据等,只能读不能写ExecuteNonQuery:可以写以可以读, 首先,我们知道这三个东东应该是ADO.NET中对数据库中操作的CMD,我们知道,如果我们要进行一个网让建设,必然在这个过程中,我们一定要进行与数据库的交互,我们要不断地进行数据库的读写,那么

ltoper的专栏 1077

ExecuteNonQuery,ExecuteReader,ExecuteScalar 区别

ExecuteNonQuery,ExecuteReader,ExecuteScalar 区别 ExecuteNonQuery方法 :执行非查询SQL操作,包括增insert、删delete、改update ExcuteReader方法 :执行查询,返回DataReader,通过DataReader的对象dr["列名"] 可以取得数据,一次读一行,可以通过while(dr.

yhh345814509的专栏 766

ExecuteReader、ExecuteScalarExecuteNonQuery的区别

ExecuteReader      执行返回行的命令。为了提高性能,ExecuteReader    使用    Transact-SQL    sp_executesql    系统存储过程调用命令。因此,如果用于执行像    Transact-SQL    SET    语句这样的命令,ExecuteReader    可能无法获得预期效果;ExecuteNonQuery     执

暖阳的进步乐园 1540

转载:SqlCommand对象 ExecuteReader,ExecuteNonQuery,EXecuteScalar

SqlCommand对象 2006年10月15日 星期日 18:03 这节课描述了SqlCommand对象以及如何使用它与数据库交互。下面是本课的目标: 知道什么是command对象 ...

weixin_30352645的博客 938

ExecuteNonQueryExecuteScalar、Dataset、ExecuteReader的不同意义用法

1. ExecuteNonQuery 方法执行 一个非查询语句( Update 、 Insert 、 Delete 等)  返回值是执行的影响行数,返回类型为int 例如:  using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "Insert into T_Users(UserNam

我是一只小小鸟 3277

ExecuteNonQuery /ExecuteReader/ ExecuteScalar

1.三者之间的区别: ExecuteNonQuery/ExecuteReader/ExecuteScalar command的命令的三个区别: ExecuteNonQuery:返回所影响的行数,select影响的行数为0,不返回任何数据。 ExecuteReader:与查询语句一起使用,返回一个数据阅读对象datareader ExecuteScalar:返回查询的第一行的第一列数...

flyqing的专栏 795
上一篇: 聚集索引和非聚集索引(转)
下一篇: 我附加数据库文件,sqlserver2008 sp1说版本地,打补丁sp2,说支持662版本及更低,高了低了都不行, 服了微软的东西
WYhack
博客等级 码龄19年 39粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值