【问题标题】:How to use columns in a DataGridView to influence MySQL如何使用 DataGridView 中的列来影响 MySQL
【发布时间】:2021-09-25 07:56:16
【问题描述】:

目前我正在做一个项目,一个人可以将 excel 文件(包含库存数量)导入 DataGridView,然后将其导出到 MySQL 表中。导出到 MySQL 时,我想将文件中的库存数量从 MySQL 中的另一个表中取出(就像你在移动库存一样)。到目前为止,我已经对进出口业务进行了分类,但我无法从表格中扣除价值。

我正在尝试

For i As Integer = 0 To DataGridView1.Rows.Count - 2 Step +1
COMMAND = New MySqlCommand("UPDATE `test`.`new_table` SET `Quantity` = `Quantity` - '@Quantity' WHERE `ID`= ('@ID')", MysqlConn)
COMMAND.Parameters.Add("@ID", MySqlDbType.VarChar).Value = DataGridView1.Rows(i).Cells(0).Value.ToString()
COMMAND.Parameters.Add("@Quantity", MySqlDbType.VarChar).Value = DataGridView1.Rows(i).Cells("Quantity").Value.ToString()

COMMAND.ExecuteNonQuery()

Next

我不知道从这里去哪里。我也尝试通过 Dim 为它们分配名称,但我没有任何运气。如果您有任何建议,我将很高兴听到它!谢谢

【问题讨论】:

  • 一些突出的东西 - 您不需要将参数名称放在 SQL 字符串内的引号中,因此只需使用 @Quantity 而不是 '@Quantity' 等。而且你正在传递VarChars 中的值,所以它们是字符串。您需要将它们作为正确的类型传入(特别是如果您要对它们进行一些数学运算)。希望 Quantity 字段不是 VarChar,否则您会遇到困难。
  • @Slugsie 感谢您回复我!我在写问题时重新输入了错误的代码(我在手机上,代码在桌面上),幸运的是,除了结尾是 .ToString 之外,数量是 INT32 格式。如果我把结尾也改成整数会有帮助吗?
  • 如果数据库字段“数量”是数字类型,则将参数作为相同类型传入。不要将数字转换为字符串,为什么要这样做?你不能对字符串进行数学运算。
  • @Slugsie 有趣的注意事项;无论如何,mysql都会将它视为一个字符串;)

标签: mysql vb.net visual-studio


【解决方案1】:

应该看起来更像:


Command = New MySqlCommand("UPDATE `test`.`new_table` SET `Quantity` = `Quantity` - @Quantity WHERE `ID`= @ID", MysqlConn)
Command.Parameters.AddWithValue("@ID", 0)
Command.Parameters.AddWithValue("@Quantity", 0)



For i = 0 To DataGridView1.Rows.Count - 2 

  Dim c = DataGridView1.Rows(i).Cells

  Command.Parameters("@ID").Value = Convert.ToInt32(c("ID").Value))
  Command.Parameters("@Quantity").Value = Convert.ToInt32(c("Quantity").Value))

  Command.ExecuteNonQuery()

Next

但实际上你的数据应该在一个类型化的数据表中,那么你的代码看起来会更好一些:

Command = New MySqlCommand("UPDATE `test`.`new_table` SET `Quantity` = `Quantity` - @Quantity WHERE `ID`= @ID", MysqlConn)
Command.Parameters.AddWithValue("@ID", 0)
Command.Parameters.AddWithValue("@Quantity", 0)



For Each r In someTable

  Command.Parameters("@ID").Value = r.ID
  Command.Parameters("@Quantity").Value = r.Quantity

  Command.ExecuteNonQuery()

Next

【讨论】:

  • 我偶然发现了 1 个代码问题,但不知道如何解决。 ID 是一个字符串/varchar。我将 Convert.ToInt32(c("ID").Value) 更改为 Convert.ToString(c("ID").Value)。现在 COMMAND.Parameters.AddWithValue("ID", 0) 似乎有问题。它会触发错误提示“输入字符串的格式不正确”。我尝试摆脱“WithValue”位,但错误是“输入字符串格式不正确”。我尝试在“ID”之后弄乱 0,但收效甚微。
  • 使用字符串设置参数:Command.Parameters.AddWithValue("@ID", "1234"),这样当你以后用Convert.ToString(c("ID"). Value)输入一个真正的字符串时,就不会抱怨了
  • 完美!非常感谢!
  • 不用担心。不要忘记通过单击灰色复选标记将问题标记为已回答。这让其他人只需从仪表板一眼就知道问题已得到解答
猜你喜欢
  • 1970-01-01
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 1970-01-01
  • 2020-05-12
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多