检查表中列的数字是否大于0

时间:2015-01-16 09:08:01

标签: c# sql asp.net

很抱歉,如果这个问题重复,但我还没有找到答案。我想检查一个表中列的值是否大于0,如果没有做的话。问题是我不知道如何从表中获取值并进行检查。

我的想法:

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

我正在使用asp.net,C#和SQL。 这是我的一些代码: //此代码是指将项目添加到表格中时,当前ID为项目编号减少1。

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

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

有人知道怎么做吗?

4 个答案:

答案 0 :(得分:1)

在查询中使用WHERE。从头到尾给我你的详细故事。 另外,如果您想在查询执行时发生错误时发出警告,可以将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.

从这里开始,您可以为查询返回错误结果添加一些逻辑处理。

答案 1 :(得分:0)

只需在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.");

您可以通过检查受影响的记录数来验证是否已设置数量,如果确定则应为1。

答案 2 :(得分:0)

要在更新后获取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 :(得分:0)

我不建议您在应用程序代码中进行此类检查。

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

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

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

或者,如果您希望在列达到特定值时执行某些sql-action,也可以使用触发器。