如何在c# mysql中更新单行

本文关键字:更新 单行 mysql | 更新日期: 2023-09-27 18:05:59

我的问题是

  1. 用相同的id更新所有数据。因为我有多个具有相同id的数据。[见下图].

  2. 我想只更新行将到期(30天)的行。我不想处理那些已经过期的物品。

下面是我的代码:
        for (int i = 0; i < dataGridViewPOS.Rows.Count; i++)
        {
            cmd = new MySqlCommand(@"UPDATE inventory2 SET quantity = @quantity WHERE itemid = @itemid ORDER BY expiry", sqlconnection);
            //codehere
        }

截图

感谢

更新:

       for (int i = 0; i < dataGridViewPOS.Rows.Count; i++)
        {
            cmd = new MySqlCommand(@"SELECT * FROM inventory2 WHERE itemid = @itemid ORDER BY expiry", sqlconnection);
            //codehere
            cmd = new MySqlCommand(@"UPDATE inventory2 SET quantity = @quantity WHERE itemid = @itemid AND CURDATE() < expiry ORDER BY expiry", sqlconnection);
            //codehere
        }

如何在c# mysql中更新单行

您需要检查SQL中的过期即

WHERE itemid = @itemid and CURDATE() < expiry

where的确切性质取决于你如何定义"Near"

WHERE itemid = @itemid and DATE_ADD(CURDATE(),INTERVAL 30 DAY) < expiry 

有效期为30天内

一旦你有了你的"接近"日期,你就可以结合一个select max

AND expiry = (SELECT MAX(expiry) FROM inventory2 WHERE itemid = @itemid)

取最大的

EDIT:你添加的信息说你想编辑未过期的记录,这与你最初的问题似乎暗示的完全相反,因此你需要做

expiry BETWEEN CURDATE() and DATE_ADD(CURDATE(),INTERVAL 30 DAY)

this将获取所有将在未来30天内到期但尚未到期的内容

可能更接近:

UPDATE inventory2 
    SET [quantity] = @quantity 
    where [itemid] = @itemid 
        AND [expiry] between CURDATE() and DATE_ADD(CURDATE(),INTERVAL 30 DAY) 

您的命令代码将更改为:

cmd = new MySqlCommand(@"UPDATE inventory2 SET quantity = @quantity WHERE itemid = @itemid AND [expiry] between CURDATE() and DATE_ADD(CURDATE(),INTERVAL 30 DAY", sqlconnection);          

这将更新inventory2中itemId匹配且过期日期小于当前日期加30天的所有行。

编辑以反映来自评论的更新要求:项目未过期,项目在30天内到期

当然,您将拥有表的唯一id。为什么不先执行一个select查询来获取唯一id,然后用唯一id引用更新该行呢?事实上,你也应该能够在一个查询合并两者。底线是使用唯一的id,并在排序后只返回选择查询中的1行,将您的临近过期日期放在顶部。