Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite如何获得条件列更新的结果?_C#_Sqlite - Fatal编程技术网

C# SQLite如何获得条件列更新的结果?

C# SQLite如何获得条件列更新的结果?,c#,sqlite,C#,Sqlite,因此,我正在ASP.NET核心中使用SQLite为我的存储库构建一个基本的电子商务站点。我用我称之为“ProductInventory”的表跟踪商店中的产品库存,该表包含一个名为“stock”的整数列。现在我不希望库存为负值,所以即使在更新查询之前我有签入软件,也有可能两个用户在大致相同的时间签出,从而导致两个更新查询,这可能会导致负值。所以我想我用一个case语句来决定减去多少。这是我到目前为止想到的 UPDATE [ProductInventory] SET [Stock] = CASE

因此,我正在ASP.NET核心中使用SQLite为我的存储库构建一个基本的电子商务站点。我用我称之为“ProductInventory”的表跟踪商店中的产品库存,该表包含一个名为“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语句的函数。我的观点是,如果您要使用事务,那么如果在第一个中间时发生另一个电子商务交易,那么第二个电子商务交易必须等到第一个数据库事务提交。数据库不可能处于无效状态,例如负库存量


祝你的电子商务网站好运

谢谢,我一定要试一试!谢谢,我一定要试一试!