2017-05-09 71 views
0

我尝试添加parameters.addwithvalue。 改变之前的代码就是这样..........Parameters.AddWithValue:参数已经被定义

Private Sub ComboBox7_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox7.SelectedIndexChanged 


    Me.Cursor = Cursors.WaitCursor 
    MysqlConn.Close() 
    MysqlConn.Open() 
    COMMAND.CommandText = "select logo from licenses where name = '" & ComboBox7.Text & "'" 
    COMMAND.Connection = MysqlConn 

    Dim da As New MySqlDataAdapter(COMMAND) 
    Dim ds As New DataSet() 
    da.Fill(ds, "projectimages") 
    Dim c As Integer = ds.Tables(0).Rows.Count 
    If c > 0 Then 
     If IsDBNull(ds.Tables(0).Rows(c - 1)("logo")) = True Then 
      PictureBox6.Image = Nothing 
     Else 
      Dim bytBLOBData() As Byte = ds.Tables(0).Rows(c - 1)("logo") 
      Dim stmBLOBData As New MemoryStream(bytBLOBData) 
      PictureBox6.Image = Image.FromStream(stmBLOBData) 
     End If 
    End If 
    Me.Cursor = Cursors.Default 
End Sub 

现在我尝试这种添加paramatrers.addwithValue无更迭:

Private Sub ComboBox7_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox7.SelectedIndexChanged 


    Me.Cursor = Cursors.WaitCursor 
    MysqlConn.Close() 
    MysqlConn.Open() 
    'COMMAND.CommandText = "select logo from licenses where name = '" & ComboBox7.Text & "'" 
    COMMAND.CommandText = "select logo from licenses where name = @ComboBox7Select" 
    COMMAND.Parameters.AddWithValue("@ComboBox7Select", If(String.IsNullOrEmpty(ComboBox7.Text), DBNull.Value, ComboBox7.Text)) 
    COMMAND.Connection = MysqlConn 

    Dim da As New MySqlDataAdapter(COMMAND) 
    Dim ds As New DataSet() 
    da.Fill(ds, "projectimages") 
    Dim c As Integer = ds.Tables(0).Rows.Count 
    If c > 0 Then 
     If IsDBNull(ds.Tables(0).Rows(c - 1)("logo")) = True Then 
      PictureBox6.Image = Nothing 
     Else 
      Dim bytBLOBData() As Byte = ds.Tables(0).Rows(c - 1)("logo") 
      Dim stmBLOBData As New MemoryStream(bytBLOBData) 
      PictureBox6.Image = Image.FromStream(stmBLOBData) 
     End If 
    End If 
    Me.Cursor = Cursors.Default 
End Sub 

有了错误“参数“ @ ComboBox7Select'已被定义。“

我做些什么改变工作?

谢谢你。

+2

不要将MySqlConnection和MySqlCommand存储为类中的字段,请不要重复使用它们。这只是错误的根源,没有任何好处。创建,初始化,使用和处理('使用'语句),无论你需要他们。 –

+0

只要你的表单已经打开并且你改变了索引值就可以创建值所以要么在子表单内使用一个命令,要么在表单加载时用'.Add'初始化参数,然后在索引上改变'.Value'更改 – Mederic

回答

1

的问题是,你正在使用你每次都使用在你的组合选择的指数变化的全局变量COMMAND。要么你初始化命令与每一时间:

COMMAND=New MySqlCommand() 

或者你必须清除参数:

COMMAND.Parameters.Clear() 
COMMAND.Parameters.AddWithValue("@ComboBox7Select", If(String.IsNullOrEmpty(ComboBox7.Text), DBNull.Value, ComboBox7.Text)) 

但最好的办法是随时创建和处置MySql对象与Using结构:

Using MysqlConn As New MySqlConnection(connString) 
    Using COMMAND As New MySqlCommand() 
    'your code 
    End Using 
End Using 
2

不要储存MySqlConnectionMySqlCommand在你的类中的字段,不要重复它们。这只是错误的根源,没有任何好处。创建,初始化,使用和处理(Using -statement)他们无论你需要他们,所以在这种方法。

你不清除的参数,这就是为什么你会得到第二次使用此错误。

因此,一个简单COMMAND.Parameters.Clear()添加之前会解决这个问题。但使用我上面提到的方法:

Private Sub ComboBox7_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox7.SelectedIndexChanged 
    Dim ds As New DataSet() 
    Dim licenseNameValue As Object = DBNull.Value 
    If Not String.IsNullOrEmpty(ComboBox7.Text) Then licenseNameValue = ComboBox7.Text 

    Using mysqlConn As New MySqlConnection("ConnectionString...") 
     Using da As New MySqlDataAdapter("select logo from licenses where name = @licenseName", mysqlConn) 
      da.SelectCommand.CommandText = "select logo from licenses where name = @licenseName" 
      da.SelectCommand.Parameters.AddWithValue("@licenseName", licenseNameValue) 
      da.Fill(ds, "projectimages") ' you dont need to open/close the connection with DataAdapter.Fill 
     End Using 
    End Using 

    ' .... 
End Sub