C# 在C中显示@@ROWCOUNT#

C# 在C中显示@@ROWCOUNT#,c#,stored-procedures,C#,Stored Procedures,执行存储过程后,如何在方法中显示@@ROWCOUNT?我想计算执行INSERT和UPDATE语句后受影响的行数: CREATE PROCEDURE [dbo].[ADProcTemp] @Username varchar(250), @DisplayName varchar(70), @isEnabled tinyint, @PassNevExp tinyint, @rowcount int OUT AS --SET NOCOUNT ON BEGI

执行存储过程后,如何在方法中显示
@@ROWCOUNT
?我想计算执行
INSERT
UPDATE
语句后受影响的行数:

CREATE PROCEDURE [dbo].[ADProcTemp]
    @Username varchar(250),
    @DisplayName varchar(70),
    @isEnabled tinyint,
    @PassNevExp tinyint,
    @rowcount int OUT
AS
    --SET NOCOUNT ON
BEGIN
    IF NOT EXISTS (SELECT TOP 1 PrezimeIme FROM [dbo].[tblZaposleni_AD] WITH (NOLOCK) 
                   WHERE NetworkLogin = @Username)
    BEGIN
        IF(@isEnabled = 1 OR @PassNevExp = 1)
             INSERT INTO [dbo].[tblZaposleni_AD](NetworkLogin, PrezimeIme, Status, PassNevExp)
             VALUES (@Username, @DisplayName, @isEnabled, @PassNevExp)

        SET @rowcount = @@ROWCOUNT;
        RETURN @@ROWCOUNT;   
    END
    ELSE
    BEGIN
        UPDATE [dbo].[tblZaposleni_AD]
        SET Status = @isEnabled,        
            PassNevExp = @PassNevExp
        WHERE NetworkLogin = @Username 
          AND (Status <> @isEnabled OR [PassNevExp] <>@PassNevExp)
    END
END
var effectedRows = Convert.ToInt32(cmd.Parameters["@rowCount"].Value);

执行sp后,需要获取OUT参数的值:

CREATE PROCEDURE [dbo].[ADProcTemp]
    @Username varchar(250),
    @DisplayName varchar(70),
    @isEnabled tinyint,
    @PassNevExp tinyint,
    @rowcount int OUT
AS
    --SET NOCOUNT ON
BEGIN
    IF NOT EXISTS (SELECT TOP 1 PrezimeIme FROM [dbo].[tblZaposleni_AD] WITH (NOLOCK) 
                   WHERE NetworkLogin = @Username)
    BEGIN
        IF(@isEnabled = 1 OR @PassNevExp = 1)
             INSERT INTO [dbo].[tblZaposleni_AD](NetworkLogin, PrezimeIme, Status, PassNevExp)
             VALUES (@Username, @DisplayName, @isEnabled, @PassNevExp)

        SET @rowcount = @@ROWCOUNT;
        RETURN @@ROWCOUNT;   
    END
    ELSE
    BEGIN
        UPDATE [dbo].[tblZaposleni_AD]
        SET Status = @isEnabled,        
            PassNevExp = @PassNevExp
        WHERE NetworkLogin = @Username 
          AND (Status <> @isEnabled OR [PassNevExp] <>@PassNevExp)
    END
END
var effectedRows = Convert.ToInt32(cmd.Parameters["@rowCount"].Value);

执行sp后,需要获取OUT参数的值:

CREATE PROCEDURE [dbo].[ADProcTemp]
    @Username varchar(250),
    @DisplayName varchar(70),
    @isEnabled tinyint,
    @PassNevExp tinyint,
    @rowcount int OUT
AS
    --SET NOCOUNT ON
BEGIN
    IF NOT EXISTS (SELECT TOP 1 PrezimeIme FROM [dbo].[tblZaposleni_AD] WITH (NOLOCK) 
                   WHERE NetworkLogin = @Username)
    BEGIN
        IF(@isEnabled = 1 OR @PassNevExp = 1)
             INSERT INTO [dbo].[tblZaposleni_AD](NetworkLogin, PrezimeIme, Status, PassNevExp)
             VALUES (@Username, @DisplayName, @isEnabled, @PassNevExp)

        SET @rowcount = @@ROWCOUNT;
        RETURN @@ROWCOUNT;   
    END
    ELSE
    BEGIN
        UPDATE [dbo].[tblZaposleni_AD]
        SET Status = @isEnabled,        
            PassNevExp = @PassNevExp
        WHERE NetworkLogin = @Username 
          AND (Status <> @isEnabled OR [PassNevExp] <>@PassNevExp)
    END
END
var effectedRows = Convert.ToInt32(cmd.Parameters["@rowCount"].Value);


您只在插入分支而不是更新分支中分配@rowcount=@@rowcount,这似乎是错误的。此外,您在c代码中没有使用“rowsAffected”,而是使用ExecuteOnQuery的返回值。为什么?我没有将@rowcount=@@rowcount放入更新中的原因是我首先要测试我的插入函数。另外-不要执行查询两次!您有
int k=cmd.ExecuteNonQuery()
和下面几行
int result=Convert.ToInt32(cmd.ExecuteScalar())-删除第二个呼叫!是的,我明白了。我把阿雷迪带走。非常感谢。无论我在代码中做了什么更改,都没有得到任何结果。您只是在insert分支中分配@rowcount=@@rowcount,而不是在update分支中,这似乎是错误的。此外,您在c代码中没有使用“rowsAffected”,而是使用ExecuteOnQuery的返回值。为什么?我没有将@rowcount=@@rowcount放入更新中的原因是我首先要测试我的插入函数。另外-不要执行查询两次!您有
int k=cmd.ExecuteNonQuery()
和下面几行
int result=Convert.ToInt32(cmd.ExecuteScalar())-删除第二个呼叫!是的,我明白了。我把阿雷迪带走。非常感谢。无论我在代码中做了什么更改,我都没有得到任何结果。严重性代码描述项目文件行抑制状态错误CS1061“SqlParameterCollection”不包含“get”的定义,并且找不到接受类型为“SqlParameterCollection”的第一个参数的可访问扩展方法“get”(是否缺少using指令或程序集引用?@Robby-抱歉,已更新。我使用的是DynamicParameters,但现在改为使用SqlParametersAfter int k=cmd.ExecuteOnQuery();让我检查一下现在会发生什么无论我做什么,rowsAffected都不会返回任何ThinkSeverity代码描述项目文件行抑制状态错误CS1061'SqlParameterCollection'不包含'Get'的定义,并且找不到接受'SqlParameterCollection'类型的第一个参数的可访问扩展方法'Get'(您是否缺少using指令或程序集引用?@Robby-抱歉,已更新。我使用的是DynamicParameters,但现在改为使用SqlParametersAfter int k=cmd.ExecuteOnQuery();让我检查现在会发生什么无论我做什么,rowsAffected都不会返回任何想法