C# SQLite如何获得条件列更新的结果?
因此,我正在ASP.NET核心中使用SQLite为我的存储库构建一个基本的电子商务站点。我用我称之为“ProductInventory”的表跟踪商店中的产品库存,该表包含一个名为“stock”的整数列。现在我不希望库存为负值,所以即使在更新查询之前我有签入软件,也有可能两个用户在大致相同的时间签出,从而导致两个更新查询,这可能会导致负值。所以我想我用一个case语句来决定减去多少。这是我到目前为止想到的C# SQLite如何获得条件列更新的结果?,c#,sqlite,C#,Sqlite,因此,我正在ASP.NET核心中使用SQLite为我的存储库构建一个基本的电子商务站点。我用我称之为“ProductInventory”的表跟踪商店中的产品库存,该表包含一个名为“stock”的整数列。现在我不希望库存为负值,所以即使在更新查询之前我有签入软件,也有可能两个用户在大致相同的时间签出,从而导致两个更新查询,这可能会导致负值。所以我想我用一个case语句来决定减去多少。这是我到目前为止想到的 UPDATE [ProductInventory] SET [Stock] = CASE
UPDATE [ProductInventory]
SET [Stock] = CASE WHEN [Stock] >= X Then [Stock] - X Else [Stock] = 0
END WHERE [ID] = 1
在上面的示例中,X是我希望从“库存”列中扣除的金额的占位符
我不明白的是,我怎样才能得到扣除多少的信息?我猜我在这里使用了错误的SQL查询,或者我的想法完全错误,任何帮助都将不胜感激。老板,我想你找错地方了。您最好使用数据库事务。在一个事务中,可以对多个SQL语句进行分组;所有语句一起执行,它们一起成功,否则将回滚。下面是一些C#伪代码:
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
using SQLiteTransaction dbTransaction = conn.BeginTransaction())
{
if (StockIsAvailable())
{
DecreaseStock();
IncreaseCashBalance();
}
dbTransaction.Commit();
}
}
在我的示例中,StockIsAvailable()
、DecreaseStock()
和IncreaseCashBalance()
是在数据库上执行SQL语句的函数。我的观点是,如果您要使用事务,那么如果在第一个中间时发生另一个电子商务交易,那么第二个电子商务交易必须等到第一个数据库事务提交。数据库不可能处于无效状态,例如负库存量
祝你的电子商务网站好运 我想你找错人了,老板。您最好使用数据库事务。在一个事务中,可以对多个SQL语句进行分组;所有语句一起执行,它们一起成功,否则将回滚。下面是一些C#伪代码:
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
using SQLiteTransaction dbTransaction = conn.BeginTransaction())
{
if (StockIsAvailable())
{
DecreaseStock();
IncreaseCashBalance();
}
dbTransaction.Commit();
}
}
在我的示例中,StockIsAvailable()
、DecreaseStock()
和IncreaseCashBalance()
是在数据库上执行SQL语句的函数。我的观点是,如果您要使用事务,那么如果在第一个中间时发生另一个电子商务交易,那么第二个电子商务交易必须等到第一个数据库事务提交。数据库不可能处于无效状态,例如负库存量
祝你的电子商务网站好运 谢谢,我一定要试一试!谢谢,我一定要试一试!