【问题标题】:check if a number from a column in a table is greater than 0检查表中列中的数字是否大于 0
【发布时间】:2023-03-07 16:50:01
【问题描述】:

对不起,如果这个问题是重复的,但我还没有找到答案。我想检查表中列的值是否大于 0,如果不做某事。问题是我不知道如何从表中获取值并检查它。

我的想法:

if(column table(Quantity) where ID=@ID >0)
   {
      Do something
   }

我正在使用 asp.net、C# 和 SQL。 这是我的一些代码: //这段代码是当一个item被添加到当前id的table中时item的个数减1。

SqlCommand command = new SqlCommand("UPDATE Items SET Quantity=Quantity-1;
command.ExecuteNonQuery();

在项目表中,我有项目的数量,所以假设该特定项目的数量为 5,每次添加到 gridview 时都会减少 1,我不希望它低于 0。(现在使用此代码,它低于 0)我有上面告诉你的想法,但我不知道该怎么做。

有人知道怎么做吗?

【问题讨论】:

  • 所以当数量达到 0 时,应该发生什么 - 只是停止减少值还是?
  • 给出错误信息并且不再做减法

标签: c# sql asp.net


【解决方案1】:

只需在查询中使用 WHERE。给我你的详细故事END to END。 另外,如果您想在查询执行时发生错误时发出警报,您可以通过将 ExecuteNonQuery 结果存储到变量中来实现。 供大家参考

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29.aspx

让我在这里强调一些要点:

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command.

For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.

从这里,你可以为你所做的事情添加一些逻辑处理,甚至查询返回错误结果。

【讨论】:

    【解决方案2】:

    要在更新后获取Quantity 列的值,请在您的SQL 语句中使用OUTPUT 子句,例如:

    UPDATE <YOUR_TABLE> SET Quantity = Quantity - 1
    OUTPUT INSERTED.Quantity
    WHERE ID = <YOUR_ID>
    

    一旦您的 Quantity 返回为 0,您就可以在软件中执行您需要的任何操作,例如如果用户尝试进一步降低它,则显示提示。

    这里有更多关于 MSDN 的信息:http://msdn.microsoft.com/en-us/library/ms177564.aspx

    如果你没有使用 SQL Server 2005 或更高版本(OUTPUT 需要它),你仍然可以编写一个简单的存储过程来做同样的事情,例如

    CREATE PROCEDURE DecreaseQuantity
        @id int
    AS
    BEGIN
    
        UPDATE <YOUR_TABLE>
        SET Quantity = Quantity - 1
        WHERE ID = @id
    
        SELECT Quantity
        FROM <YOUR_TABLE>
        WHERE ID = @id
    
    END
    

    【讨论】:

      【解决方案3】:

      只需在 UPDATE 命令中使用 WHERE 子句:

      SqlCommand command = new SqlCommand(
                           "UPDATE Items SET Quantity=Quantity-1 WHERE ID=@Id AND Quantity>0");
      command.Parameters.AddWithValue("@Id", id);
      int numberOfRecords = command.ExecuteNonQuery();
      if (numberOfRecords==0)
          throw new Exception("Error setting quantity.");
      

      您可以通过检查受影响的记录数来验证是否设置了数量,如果OK,应该是1。

      【讨论】:

      • 是的,但是如果我想在尝试减少时给出错误消息?
      • @user4457996 见stackoverflow.com/a/10059585/2224701。如果返回的数字为 0,则没有更新任何内容。
      【解决方案4】:

      我不建议在您的应用程序代码中进行这种检查。

      为了确保 SQL 中列的值范围,存在检查约束的构造。 例如,如果您想确保列中永远不会有负值(或零),您可以添加以下约束

      ALTER TABLE Items
      ADD CONSTRAINT CK_Items_Quantity_Range CHECK (
         Quantity > 0
      )
      

      然后,如果您执行UPDATE/INSERT,您将收到一个异常,您可以在应用程序代码中做出反应。

      如果您希望在列达到某个值时执行某些 sql 操作,您也可以使用触发器。

      【讨论】:

        猜你喜欢
        • 2013-05-27
        • 1970-01-01
        • 1970-01-01
        • 2019-06-11
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多