Sql server 2008 SQL Server 2008:ExecuteOnQuery未返回受影响的行数

Sql server 2008 SQL Server 2008:ExecuteOnQuery未返回受影响的行数,sql-server-2008,executenonquery,Sql Server 2008,Executenonquery,在C#中,我使用(存储过程)启动更新查询: 然后在存储过程中,我构建了一个动态查询,并使用sp_executesql执行: DECLARE @ParmDefinition NVARCHAR(500) DECLARE @pParam1 NUMERIC(18,0) DECLARE @pParam2 BIGINT SET @ParmDefinition = N'@Param1 numeric(18,0), @Param2 bigint' SET @pParam

在C#中,我使用(存储过程)启动更新查询:

然后在存储过程中,我构建了一个动态查询,并使用
sp_executesql
执行:

    DECLARE @ParmDefinition NVARCHAR(500)
    DECLARE @pParam1 NUMERIC(18,0)
    DECLARE @pParam2 BIGINT

    SET @ParmDefinition = N'@Param1 numeric(18,0), @Param2 bigint'
    SET @pParam1 = @Param1
    SET @pParam2 = @Param2

    DECLARE @SQLString  nvarchar(max)= 'UPDATE ' +  @MyServer + @MyDB + '.[dbo].[MyTable] ' +
                                       'SET SomeField= @Param1 ' +
                                       'WHERE F1= @Param2', @rowcnt INT;

    EXECUTE sp_executesql @SQLString, @ParmDefinition, @Param1 = @pParam1, @Param2 = @pParam2
    SELECT @rowcnt = @@ROWCOUNT
在C#
ExecuteNonQuery
中返回-1。我想得到受影响的行数

有什么问题吗?

我已经解决了

罪魁祸首是我在存储过程开头放的一行:

command.ExecuteNonQuery(...);
不计数


通过删除上述行,现在它工作正常,受影响的行数将正确返回到C#。

请发布调用SP的C#代码。。。。我理解你的问题,@rowcnt必须定义为一个输出参数。我已经解决了。问题是,在存储过程开始时,我在下面的行中输入了:setnocounton。通过删除这一行,现在正在工作,受影响的行数正在工作。谢谢。