C# 如何在C mysql中更新一行

C# 如何在C mysql中更新一行,c#,mysql,C#,Mysql,我的问题是 它会更新具有相同id的所有数据。因为我有多个具有相同id的数据。[请参见下图] 我只想更新即将过期30天的行。我不想对那些已经过期的物品做任何事情 这是我的密码: for (int i = 0; i < dataGridViewPOS.Rows.Count; i++) { cmd = new MySqlCommand(@"UPDATE inventory2 SET quantity = @quantity WHERE it

我的问题是

它会更新具有相同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
        }
谢谢

更新:


您需要在SQL中检查过期时间 即

所以就拿最大的

编辑:您添加的信息表示您希望编辑未过期的记录,这与您原来的问题所暗示的完全相反,您需要这样做

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

这将获得在未来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,在按将您的接近到期日期置于顶部的方式排序后,在select查询中只返回1行

临近到期对您意味着什么?我设置了2017年和2018年等到期日,我只想更新数据,如果到期日临近2017年等当前日期,您需要向您的问题中添加更多信息。Order BY in update不会做您认为会做的事。如果只想更新即将到期的行,那么必须在WHERE子句中包含该条件。确保您知道要更新/删除的内容的提示:在执行更新之前,尝试通过使用适当的条件运行SELECT来练习仅获取要更新的行。我刚刚添加了一些信息。问题在于要求不明确。如果最近的期限是20年,会发生什么情况?@apokryfos然后查询更新该项。此时我们还需要什么其他功能?下一个到期的项目将得到更新,无论它离当前日期有多远。我更关心的是更新过期的物品。我认为这是不好的。@apokryfos没有这个答案的定义,和其他答案一样好other@JaredStroeb你错过了更新的一部分,它现在说我不想对那些已经过期的物品做任何事情。@MikeT谢谢,我已经包括了这个要求。谢谢,我也会试试这个。
AND expiry = (SELECT MAX(expiry) FROM inventory2 WHERE itemid = @itemid)
expiry BETWEEN CURDATE() and DATE_ADD(CURDATE(),INTERVAL 30 DAY)
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);