asp.net ExecuteNonQuery()总是返回-1

amrnrhlw  于 2024-01-09  发布在  .NET
关注(0)|答案(3)|浏览(140)

我正在使用存储过程在表中插入一些值。

CREATE PROCEDURE [dbo].[Sp_InsertValue]
@Val1 as nvarchar(50)
@Val2 as nvarchar(50)
as
BEGIN
    IF NOT EXISTS(SELECT * FROM @mytable WHERE ID=@Val1)
    INSERT INTO @mytable VALUES(@VAL2)
END

字符串
我使用ExecuteNonQuery()在ASP.NET中使用C#调用这个存储过程。它工作正常,没有问题,如果值不存在,它会插入值。问题是cmd.ExecuteNonQuery()总是返回-1。我希望如果插入记录,它应该返回1,如果不插入,它应该返回0,对吗?

c3frrgcw

c3frrgcw1#

检查存储过程中是否没有“SET NOCOUNT ON”。这将停止返回受影响的行数。字面上的“NoCount”为ON。
在这种情况下,默认响应将始终为“-1”。

o75abkj4

o75abkj42#

ExecuteNonQuery不返回任何行,任何输出参数或Map到参数的返回值都将填充数据。
对于UPDATE、UPDATE和UPDATE语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值是-1。
1.如果在存储过程中执行insert/update/delete语句之前设置了SET NONODERON。
ExecuteNonQuery返回值-1
1.在整个存储过程中,如果由于以下情况而没有机会执行Insert/Update/Delete语句,
December @x int = 5;如果x > 5开始执行插入/更新/删除操作。结束
--其他类型的发言
在上面的例子中,它不会到达内部if条件,所以没有机会在整个存储过程中执行insert/update/delete语句,所以在这种情况下也是如此。
ExecuteNonQuery返回值-1

a0zr77ik

a0zr77ik3#

补充斯图尔特的回答
当StoredProcedure在SQL Server上使用ExecuteNonQuery返回-1时,其中DB或过程的SET NONODRY为ON。

-- SET NOCOUNT OFF to return the total records affected
    -- for DELETE, INSERT & UPDATE RESULTS
    SET NOCOUNT OFF;

字符串

相关问题