仅当更新的行不为null时才获取更新的行的输出吗?

时间:2019-02-26 18:46:59

标签: c# sql-server

尝试获取更新行的结果时遇到问题,如下所示,我使用的查询在满足特定条件时会更新特定行,但是尽管不满足条件,但更新查询输出获取的值为“ 0”而不是NULL,是否有任何提示,以便我可以在同一查询中解决此问题,因此,我试图避免使用其他查询,因为它在必须优化的方法中最可能的。

SqlCommand loadbonus = new SqlCommand();
loadbonus.Connection = conn;
loadbonus.CommandText = "UPDATE Client SET [Restant Bonus]=[Restant Bonus]-(SELECT SUM([Prix Total]) FROM Comptoir WHERE [N° Comptoir]='" + tabcontrol.SelectedIndex + "'),[Total Consommé]=[Total Consommé]+(SELECT SUM([Prix Total]) FROM Comptoir WHERE [N° Comptoir]='" + tabcontrol.SelectedIndex + "') OUTPUT INSERTED.[Restant Bonus] WHERE [Code Client]=@CodeClient AND [Bonus Fidélité]='1'";
loadbonus.Parameters.Add("@CodeClient", SqlDbType.Int).Value = string.IsNullOrWhiteSpace(clientcodecomptoire.Text) ? DBNull.Value : (object)Convert.ToInt32(clientcodecomptoire.Text);

int restantbonus = Convert.ToInt32(loadbonus.ExecuteScalar());
if (restantbonus <= 0)
{// here is the issue! the left side of the If statement can containt there "0" value for both a "0" value and a Null value}

1 个答案:

答案 0 :(得分:0)

使用存储过程有很多好处。它开始为您提供与应用程序分离的数据层。它也是参数化的,因此可以避免sql注入。

这是您的程序的外观。

create procedure Client_Update
(
    @NComptoir int
) as

    set nocount on;

    declare @MyTotal int;

    SELECT @MyTotal = SUM([Prix Total]) 
    FROM Comptoir 
    WHERE [N° Comptoir] = @NComptoir;

    UPDATE Client
    SET [Restant Bonus] = [Restant Bonus] - @MyTotal
        ,[Total Consommé] = [Total Consommé] + @MyTotal;

    select @MyTotal;

然后在dotnet中使用,您应该进行一些更改。您需要在诸如命令和连接之类的对象周围使用USING语句,以确保正确处理它们。您已经有一个连接对象,所以我留给您。

using (SqlCommand loadbonus = new SqlCommand("Client_Update", conn))
{
    loadbonus.CommandType = CommandType.StoredProcedure;
    loadbonus.Parameters.Add("@NComptoir", SqlDbType.Int).Value = tabcontrol.SelectedIndex;
    int restantbonus = Convert.ToInt32(loadbonus.ExecuteScalar());
    if (restantbonus <= 0)
    {
    }
}

我看到的问题是,您在代码中添加了一个参数(@Seuil),但这不是更新语句的一部分。并且由于将值设置为文本框的文本,因此将其设置为空字符串时将获得0。那是因为它正在被转换为int。我不知道该参数的用途是什么,因为它不是查询的一部分。

我希望这至少有助于您朝正确的方向前进。