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
块在尽可能小的范围内创建、使用和处置 DbConnection
和 DbCommand
对象
- 您应该选择
Add
而不是 AddWithValue
,这样您就可以指定数据类型而不是强制 DB Provider 猜测并减少数据类型不匹配错误的可能性。
- 这些数据类型是猜测;
CurrentId
未在任何地方定义并给出名称,两者似乎都是整数而不是字符串。
我有以下代码,用于在 VB.NET
中使用 MySQL 查询将数据插入 tableDim 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
块在尽可能小的范围内创建、使用和处置DbConnection
和DbCommand
对象 - 您应该选择
Add
而不是AddWithValue
,这样您就可以指定数据类型而不是强制 DB Provider 猜测并减少数据类型不匹配错误的可能性。 - 这些数据类型是猜测;
CurrentId
未在任何地方定义并给出名称,两者似乎都是整数而不是字符串。