黑马程序员技术交流社区

标题: 关于ADO.NET中ExecuteScalar()的用法 [打印本页]

作者: 李荣壮    时间: 2011-11-5 22:25
标题: 关于ADO.NET中ExecuteScalar()的用法
ExecuteScalar() :用于执行查询,并返回查询所返回的结果集中的第一行的第一列,其返回值是个Object类

它可以用到返回输入的数据是第几条
正确的用法应该是这样的:
insert into tableName(Name,Number) OUTPUT INSERTED.ID values('aaaa',123)
在这下面加ExecuteScalar();

但是我忘记加OUTPUT INSERTED.ID
结果就会重复插入一条数据,一共插入了两条相同的数据

求解,为什么会出现这种情况?

该贴已经同步到 李荣壮的微博
作者: 小石    时间: 2011-11-6 20:52
这个ExecuteScalar()是用于select查询的吧 返回单个值
ExecuteNonQuery()是用于执行指定的SQL语句 像update insert delete等 返回受影响行数
作者: 李荣壮    时间: 2011-11-6 21:50
小石 发表于 2011-11-6 20:52
这个ExecuteScalar()是用于select查询的吧 返回单个值
ExecuteNonQuery()是用于执行指定的SQL语句 像update ...

{:3_48:}问题还是木有回答啊
作者: 夏雪锐    时间: 2011-11-6 21:52
本帖最后由 夏雪锐 于 2011-11-6 21:58 编辑

你要理解OUTPUT INSERTED.ID的真正意思,这里并不是返回输入的数据是第几条,是返回你刚刚插入的id这个字段的值,你可能设了这个ID为主键,然后设它为自动增长了,这样就可能恰好被你误认是数据的第几行了。
实际上你还可以insert into tableName(Name,Number) OUTPUT INSERTED.name values('aaaa',123);这样写,它不光插入数据‘aaa’,123,而且还返回刚刚插入的name的值。---在SQL SERVER management中就不显示。。。行受影响了
注意这里inserted.后面的东西必须是表里面已经有的字段,
还有这里的"刚刚",并不是指上一次的意思。表“本次”的意思
所以也就不难理解insert into tableName(Name,Number) OUTPUT INSERTED.ID values('aaaa',123)
你写多少次就重复插入同样的数据了,不信你试试。反正我是信了。
----------------------------------------------------------------------------------------说的可能不大对头,我也是新手,欢迎拍砖。
作者: 李荣壮    时间: 2011-11-6 22:11
小石 发表于 2011-11-6 20:52
这个ExecuteScalar()是用于select查询的吧 返回单个值
ExecuteNonQuery()是用于执行指定的SQL语句 像update ...

抱歉,刚没看明白,想了一下,原来是对的,问题出在ExecuteNonQuery()上,我原来的理解有误
作者: 朱勋    时间: 2011-11-7 11:08
貌似在数据里面设置主键
作者: 小石    时间: 2011-11-7 18:10
李荣壮 发表于 2011-11-6 22:11
抱歉,刚没看明白,想了一下,原来是对的,问题出在ExecuteNonQuery()上,我原来的理解有误 ...

囧{:3_60:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2