从存储过程向C#函数返回值

时间:2020-05-04 10:30:41

标签: c# stored-procedures

我试图计算运行存储过程后要更新的用户数和插入的用户数。

CREATE PROCEDURE [dbo].[ADProcTemp]
    @Username varchar(250),
    @DisplayName varchar(70),
    @isEnabled tinyint,
    @PassNevExp tinyint,
    @addedUser int OUTPUT,
    @updatedUser int OUTPUT
AS  
BEGIN   
    SET @addedUser = 0
    SET @updatedUser = 0
    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 @addedUser = @addedUser + @@ROWCOUNT;   
        SELECT @addedUser As UkupnoDodanihKorisnika
    END
    ELSE
    BEGIN
        UPDATE [dbo].[tblZaposleni_AD]
        SET Status = @isEnabled,        
            PassNevExp = @PassNevExp
        WHERE NetworkLogin = @Username 
          AND (Status <> @isEnabled) OR (PassNevExp <>@PassNevExp)  
          SET  @updatedUser =  @updatedUser + @@ROWCOUNT; 
          SELECT @updatedUser As UkupnoIzmjenjenihKorisnika
    END  
END

这是我的存储过程,现在我要在C#代码中显示存储过程中的@addedUser@updatedUser变量。

到目前为止,我创建了这个

public void ExcStrPrc(string Username, string DisplayName, bool isEnable, bool PassNevExp)
{
    SqlConnection conn = new SqlConnection(@"Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=DesignSaoOsig1;Integrated Security=True");
    SqlCommand cmd = new SqlCommand("ADProcTemp", conn);
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.AddWithValue("@Username", Username.ToString().Trim());
    cmd.Parameters.AddWithValue("@DisplayName", DisplayName.ToString().Trim());
    cmd.Parameters.AddWithValue("@isEnabled", Convert.ToInt32(isEnable));
    cmd.Parameters.AddWithValue("@PassNevExp", Convert.ToInt32(PassNevExp));

    cmd.Parameters.Add("@addedUser", SqlDbType.Int).Direction = ParameterDirection.Output;
    cmd.Parameters.Add("@updatedUser", SqlDbType.Int).Direction = ParameterDirection.Output;

    conn.Open();
    int k = cmd.ExecuteNonQuery();           

    if (k != 0)
    {
        Console.WriteLine("Uspjesno izvrseno !");
    }

    Console.WriteLine("Ukupno novih korisnika {0}");
    conn.Close();
}

有什么想法如何显示从存储过程到C#函数的计数器?我在函数中添加了内容,现在我没有在输出中得到任何数据...

1 个答案:

答案 0 :(得分:1)

TBH是很久以前的,因为我弄乱了输出参数,但是您添加了输出参数,但从未检查过这些参数。您所需的值应在这些参数中。 我建议您尝试获取这些值,例如(在执行完之后):

var addedUserCount = (int)cmd.Parameters["@addedUser"].Value;

或类似的东西

相关问题