Redefining/Re-setting 个参数在 MySQL 个查询中

Redefining/Re-setting parameters in MySQL query

我有以下代码,用于在 VB.NET

中使用 MySQL 查询将数据插入 table
Dim MySqlCmdStr = "INSERT INTO tb_idlink(id1,id2) " &
    "VALUES (@par1,@par2)"
MySqlCmd.CommandText = MySqlCmdStr
Dim checkedItem As Object
For Each checkedItem In CheckedListBox_1.CheckedItems
    Try
        MySqlCmd.Connection = MySqlConn
        With MySqlCmd
            .Parameters.AddWithValue("@par1", currentID)
            .Parameters.AddWithValue("@par2", checkedItem.ToString())
        End With

        MySqlConn.Open()

        MySqlCmd.ExecuteNonQuery()
        MySqlConn.Close()
    Catch ex As MySqlException
        MessageBox.Show(ex.Message)
    End Try
Next

我的问题是,如果我在 CheckedListBox_1 中选中了多个框,那么在第二个循环中会出现类似 "parameter @par1 already defined" 的异常。有什么办法可以重新定义它吗?我对整个 API.

不是很熟悉

此外,我不是 100% 确定循环是否是执行此操作的最佳方法,但这是我脑海中首先想到的。请随意提出替代方法。

您无需重新定义参数,只需提供一个新值即可:

Dim SQL = "INSERT INTO tb_idlink (id1,id2) VALUES (@par1,@par2)"

Using dbcon As New MySqlConnection(MySQLConnStr)
    Using cmd As New MySqlCommand(SQL, dbcon)

        ' define the parameter names and types
        cmd.Parameters.Add("@par1", MySqlDbType.Int32)
        cmd.Parameters.Add("@par2", MySqlDbType.Int32)    ' ????

        dbcon.Open()
        For Each checkedItem In CheckedListBox1.CheckedItems
            ' provide the parameter values
            cmd.Parameters("@par1").Value = currentID
            cmd.Parameters("@par2").Value = Convert.ToInt32(checkedItem)
            cmd.ExecuteNonQuery()
        Next
    End Using
End Using
  • 您的代码似乎重用了全局连接,即 ill-advised。以上使用 Using 块在尽可能小的范围内创建、使用和处置 DbConnectionDbCommand 对象
  • 您应该选择 Add 而不是 AddWithValue,这样您就可以指定数据类型而不是强制 DB Provider 猜测并减少数据类型不匹配错误的可能性。
  • 这些数据类型是猜测; CurrentId 未在任何地方定义并给出名称,两者似乎都是整数而不是字符串。