A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李荣壮 黑马帝   /  2011-11-5 22:25  /  3839 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ExecuteScalar() :用于执行查询,并返回查询所返回的结果集中的第一行的第一列,其返回值是个Object类

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

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

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

该贴已经同步到 李荣壮的微博

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

6 个回复

倒序浏览
这个ExecuteScalar()是用于select查询的吧 返回单个值
ExecuteNonQuery()是用于执行指定的SQL语句 像update insert delete等 返回受影响行数

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
小石 发表于 2011-11-6 20:52
这个ExecuteScalar()是用于select查询的吧 返回单个值
ExecuteNonQuery()是用于执行指定的SQL语句 像update ...

{:3_48:}问题还是木有回答啊
回复 使用道具 举报
本帖最后由 夏雪锐 于 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)
你写多少次就重复插入同样的数据了,不信你试试。反正我是信了。
----------------------------------------------------------------------------------------说的可能不大对头,我也是新手,欢迎拍砖。

评分

参与人数 1技术分 +1 收起 理由
杨恩锋 + 1

查看全部评分

回复 使用道具 举报
小石 发表于 2011-11-6 20:52
这个ExecuteScalar()是用于select查询的吧 返回单个值
ExecuteNonQuery()是用于执行指定的SQL语句 像update ...

抱歉,刚没看明白,想了一下,原来是对的,问题出在ExecuteNonQuery()上,我原来的理解有误
回复 使用道具 举报
貌似在数据里面设置主键
回复 使用道具 举报
小石 黑马帝 2011-11-7 18:10:34
7#
李荣壮 发表于 2011-11-6 22:11
抱歉,刚没看明白,想了一下,原来是对的,问题出在ExecuteNonQuery()上,我原来的理解有误 ...

囧{:3_60:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马