如何在c# mysql中更新单行
本文关键字:更新 单行 mysql | 更新日期: 2023-09-27 18:05:59
我的问题是
-
用相同的id更新所有数据。因为我有多个具有相同id的数据。[见下图].
-
我想只更新行将到期(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
}
您需要检查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行,将您的临近过期日期放在顶部。