我有以下代码,用于在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%确定是否循环它是最好的方法,但它是第一个突然出现在我脑海中的东西。请随意提出另一种方法。
答案 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
块来尽可能在最小范围内创建,使用和处置DbConnection
和DbCommand
个对象Add
而不是AddWithValue
,这样您就可以指定数据类型,而不是强制数据库提供程序猜测并减少数据类型不匹配错误的可能性。CurrentId
未在任何地方定义,并且给定名称,两者似乎都是整数而不是字符串。