SQL Server 2008:Executenonquery不返回受影响的行数

时间:2018-11-21 18:24:32

标签: sql-server-2008 executenonquery

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

command.ExecuteNonQuery(...);

然后在存储过程中,我建立一个动态查询并使用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。我想获取受影响的行数。

出什么问题了?

1 个答案:

答案 0 :(得分:1)

我已经解决了。

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

开启NOCOUNT;

通过删除上面的行,现在它可以正常工作,受影响的行数已正确返回给C#。