很抱歉,如果这个问题重复,但我还没有找到答案。我想检查一个表中列的值是否大于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)我有我上面告诉你的想法,但我不知道该怎么做。
有人知道怎么做吗?
答案 0 :(得分:1)
在查询中使用WHERE。从头到尾给我你的详细故事。 另外,如果您想在查询执行时发生错误时发出警告,可以将ExecuteNonQuery结果存储到变量中。 这是供您参考的
让我在此强调一些观点:
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,也可以使用触发器。