SQL Server 2008存储过程突然返回-1

Aag*_*nor 0 c# stored-procedures sql-server-2008

我使用SQL Server 2008数据库中的以下存储过程将值返回到我的C#-Program

ALTER PROCEDURE [dbo].[getArticleBelongsToCatsCount] 
@id int
AS
BEGIN
   SET NOCOUNT ON;

   DECLARE @result int;

   set @result = (SELECT COUNT(*) FROM art_in_cat WHERE child_id = @id);
   return @result;
END
Run Code Online (Sandbox Code Playgroud)

我使用SQLCommand-Object来调用此存储过程

public int ExecuteNonQuery()
{
  try
  {
    return _command.ExecuteNonQuery();
  }
  catch (Exception e)
  {
    Logger.instance.ErrorRoutine(e, "Text: " + _command.CommandText);
    return -1;
  }
}
Run Code Online (Sandbox Code Playgroud)

直到最近,一切正常.突然之间,存储过程返回-1.起初,我怀疑,ExecuteNonQuery-Command会导致和Exception,但是当单步执行该函数时,它会显示没有抛出Exception,返回值直接来自return _command.ExecuteNonQuery();

我检查了以下参数,它们是预期的: - 连接对象被设置为具有正确访问值的正确数据库 - SP的参数在那里并包含正确的类型,方向和值

然后我通过SQLManager检查了SP,我使用了相同的参数值,例如我的C#带来的结果为-1(顺便说一句.我在我的C'程序中检查了一些参数值,并且它们返回-1)但是在管理器中,SP返回正确的值.

看起来我的C#编程的调用有点被窃听,但由于我没有得到任何错误(它只是来自SP的-1),我不知道,在哪里寻找解决方案.

Rya*_*ner 5

ExecuteNonQuery将返回受INSERT,UPDATE或DELETE操作影响的行数,而不是存储过程的返回值.如果它过去有效,您的查询是否有可能修改数据?

要获取存储过程的返回值,请使用ParameterDirection.ReturnValue向命令添加参数.在调用ExecuteNonQuery()之后,将使用存储过程的返回值填充该参数.