在MySQL查询中重新定义/重新设置参数

时间:2017-02-13 22:54:34

标签: mysql .net vb.net sqlparameter

我有以下代码,用于在VB.NET中使用MySQL查询将数据插入表中

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中检查了多个方框,那么在第二个循环中会出现类似"参数@ par1已定义"的异常。有没有办法可以重新定义它?我并不完全熟悉整个API。

此外,我不能100%确定是否循环它是最好的方法,但它是第一个突然出现在我脑海中的东西。请随意提出另一种方法。

1 个答案:

答案 0 :(得分:2)

您不需要重新定义参数,只需提供一个新值:

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
  • 您的代码似乎重用了全局连接,这是不明智的。以上使用Using块来尽可能在最小范围内创建,使用和处置DbConnectionDbCommand个对象
  • 您应该支持Add而不是AddWithValue,这样您就可以指定数据类型,而不是强制数据库提供程序猜测并减少数据类型不匹配错误的可能性。
  • 这些数据类型是猜测; CurrentId未在任何地方定义,并且给定名称,两者似乎都是整数而不是字符串。