c# - 计算以避免数据库中出现负值

标签 c# sql-server

如何在我的程序中设置一个陷阱,当我按下购买按钮并且要购买的数量超过我的数据库中的剩余数量时,它会给出一个错误,指出没有足够的剩余数量。目前它只会达到负值。 SQL Server 不支持无符号值,我不知道我想做的事情是否可行。

这是我的代码。

SqlConnection con = new SqlConnection(
 @"Data Source=DESKTOP-39SPLT0\SQLEXPRESS;Initial Catalog=posDB;Integrated Security=True");

string Query = "UPDATE tblProducts SET qty = qty - @quantity where pName = @name";         
using (SqlCommand cmd = new SqlCommand(Query, con))
{
    cmd.Parameters.AddWithValue("@quantity", int.Parse(txBurger.Text));
    cmd.Parameters.AddWithValue("@name", label1.Text);              
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
}
using (SqlCommand cmd = new SqlCommand(Query, con))
{                
    cmd.Parameters.AddWithValue("@quantity", int.Parse(txCheese.Text));
    cmd.Parameters.AddWithValue("@name", label5.Text);
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
}

最佳答案

您可以对表中 qty 的值设置 CONSTRAINT。例如:

CREATE TABLE test (qty int);
ALTER TABLE test ADD CONSTRAINT PosQty CHECK (qty >= 0);
GO

INSERT INTO test VALUES(3);
GO
UPDATE test
SET qty = qty - 2; --Will work (3 - 2 = 1) 
GO
UPDATE test
SET qty = qty - 3; --Will fail (1 - 3 = -2)
GO
UPDATE test
SET qty = qty - 1; --Will work (1 - 1 = 0)
GO
--Clean up
DROP TABLE test;

当然这也不一定合适,看你的场景。您绝对需要确保正确处理错误。

关于c# - 计算以避免数据库中出现负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49387001/

相关文章:

c# - 用于在 UI 和 C 代码之间进行消息传递的套接字?

sql-server - 将 SQL 查询存储在 sql server 的表中

sql-server - 使用存储过程中的位输入来确定如何过滤where子句中的结果

sql-server - SQL 参数在内部是如何工作的?

c# - 如何通过文本框获取消息

c# - 在 C# 中自定义以下 app.config?

c# - 列为复选框并使用转换器时的无效操作异常

c# - 数据网格绑定(bind) MVVM

sql - 如何在 SQL 中对除负数或 null 之外的一列值求和

php - 如何使用 PHP 在 Linux/Apache 上使用 Windows 身份验证连接到 SQL Server?