sqlserver2005下使用存储过程,为何ExecuteNonQuery()总是返回-1

wang66111988 2010-12-23 11:04:04
sqlserver2005下使用存储过程,为何ExecuteNonQuery()总是返回-1???

存储过程为:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[query_user]
@ID int output,
@name varchar(10),
@pass varchar(10)
AS
BEGIN
SET NOCOUNT OFF;
SELECT @ID= (SELECT ID from player where name =@name and pass = @pass)
END

C#中
int me = myCommand.ExecuteNonQuery();为何ExecuteNonQuery()总是返回-1???
...全文
180 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
luojie81 2010-12-24
  • 打赏
  • 举报
回复
看你的代码,你是想返回用户的ID?
如果是的,直接这样写就可以了
C#中
int me = (int)myCommand.ExecuteScalar();
nosaxw 2010-12-24
  • 打赏
  • 举报
回复
ExecuteReader,在读取时是保持连接的。
如果你要读取数据,量少的可以用这个,如果是读取一个返回值,就像你要读取存储过程中的返回值id,那么ExecuteScalar()很适合你,因为它返回的是第一行第一列的值(object)。
如果你要读取大量的数据,用SqlDataAdapter去读取,出来的就是一个DataSet 或者DataTable。
wang66111988 2010-12-23
  • 打赏
  • 举报
回复
SqlDataReader sr = myCommand.ExecuteReader();
sr.Read()为false
wang66111988 2010-12-23
  • 打赏
  • 举报
回复
(1 行受影响)

(1 行受影响)

parameters[0].Value为1
wuyq11 2010-12-23
  • 打赏
  • 举报
回复
CREATE PROCEDURE [dbo].[query_user]
@ID int output,
@name varchar(10),
@pass varchar(10)
AS
BEGIN
SELECT @ID= (SELECT top 1 ID from player where name=@name and pass=@pass)
END
看看parameters[0].Value
nosaxw 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wang66111988 的回复:]
上LZ当了?????
[/Quote]
对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。

你是select语句啊。你说会返回什么?

我看了你的存储过程,我觉得ExecuteScalar()会比较适合你现在的情况。
http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executescalar(v=VS.80).aspx
wang66111988 2010-12-23
  • 打赏
  • 举报
回复
我想通过name pass对用户账户验证,ExecuteNonQuery()不行那如何做呢?
wang66111988 2010-12-23
  • 打赏
  • 举报
回复
上LZ当了?????
nosaxw 2010-12-23
  • 打赏
  • 举报
回复
上LZ当了。不干了。自己去看MSDN

备注
--------------------------------------------------------------------------------

您可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库中的数据。

虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。

对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。


http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcommand.executenonquery(v=VS.80).aspx
wang66111988 2010-12-23
  • 打赏
  • 举报
回复
return value为0
wang66111988 2010-12-23
  • 打赏
  • 举报
回复
查询分析中执行后,还是这样
xixihaha_2011_098 2010-12-23
  • 打赏
  • 举报
回复
用查询分析器执行,看一下具体的提示吧,
wang66111988 2010-12-23
  • 打赏
  • 举报
回复
ExecuteNonQuery()总是返回-1
wuyq11 2010-12-23
  • 打赏
  • 举报
回复
在查询分析中执行
nosaxw 2010-12-23
  • 打赏
  • 举报
回复

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[query_user]
@name varchar(10),
@pass varchar(10)
AS
BEGIN
declare @ID int
SELECT @ID = ID from player where name =@name and pass = @pass
select @ID
END



应该有输出ID的。

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧