如果表中已经存在行的值,我想更新它

Posted

技术标签:

【中文标题】如果表中已经存在行的值,我想更新它【英文标题】:I want to update the Value of a row if it already exist in table 【发布时间】:2021-01-04 08:40:10 【问题描述】:

如果产品名称已经在表中,我想更新 Qty 的值。

            
                connection.Open();

                OleDbCommand command = new OleDbCommand();
                command.Connection = connection;
                command.CommandText = "insert into Product ([Name],[Category],[Supplier],[Brand],[HSNCode],[SKUCode],[CP],[SP],[Psize],[Colour],[ProductImage],[BarcodeImage],[InsertionDate],[QTY]) values ('" + txtProduct.Text + "', '" + comboBoxCategory.Text + "', '" + comboBoxSupplier.Text + "', '" + txtBrand.Text + "', '"+txtHSN.Text+"','"+txtSKU.Text+"','"+txtCP.Text+"','"+txtSP.Text+"','"+comboBoxSize.Text+"','"+checkedListBoxColour.Text+"','"+ProductPictureBox.Image+"','"+BarcodePictureBox.Image+"', '"+ DateTime.Now.Date+ "','"+QtyTextBox.Text+ "')  ON DUPLICATE KEY UPDATE [QTY] = VALUES(QTY+1);";
                command.ExecuteNonQuery();

                MessageBox.Show("Saved successfully");
                MessageBox.Show(txtProduct.Text);
            
            catch (Exception ex)
            
                MessageBox.Show("Error " + ex);
            

我试过这个查询,但它给出了缺少分号的错误。

【问题讨论】:

您确定您正在运行 mysql 吗?列名周围的方括号表示 SQL Server(或者可能是 SQLite)。 请参数化您的查询... @GMB 我正在使用 ms 访问数据库 This answer 显示了 Access 的一般方法(不支持 ON DUPLICATE KEY)。答案是针对 Python 的,不过翻译成 C# 代码应该不会太难。 @BrootsWaymb 在参数化相同的错误后。 【参考方案1】:

INSERT ... ON DUPLICATE KEY UPDATEINSERT 语句的 MYSQL 扩展,如果它发现重复的唯一键或主键,将改为执行 UPDATE

检查您的表结构以查看该表是否有任何唯一键或主键。

【讨论】:

产品名是主键

以上是关于如果表中已经存在行的值,我想更新它的主要内容,如果未能解决你的问题,请参考以下文章

如果表中的行不存在,我如何更新或插入它?

检查表中是不是存在行的最有效方法是啥?

如果已经存在,将数据更新到 MySQL 表中[重复]

在 Oracle 中,我可以执行“将值插入或更新到表中”吗

应用子表时如何将开窗查询事件做成多选?

Oracle 最佳实践使用父表中的值更新表中的 5000 万个子行