2017-05-09 10 views
0

私はparameters.addwithvalueを追加しようとしています。コードはそのようなものです変更前 ..........私は、これが大成功せずparamatrers.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 

:「

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はクラスにフィールドとして格納しないでください。まったく再利用しないでください。それは何のメリットもないエラーの原因に過ぎません。必要な場所に作成、初期化、使用、処分する( 'Using'-statement) –

+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)) 

しかし、最善の方法は、常にUsing構造体でMySqlオブジェクトを作成し、処分されています

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

クラスにフィールドとしてMySqlConnectionMySqlCommandを格納しないでください。それらはまったく再利用しないでください。それは何のメリットもないエラーの原因に過ぎません。必要に応じてこのメソッドを作成、初期化、使用、廃棄してください(Using-statement)。

パラメータをクリアしないため、2回目にこのエラーが発生します。

単純に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 
関連する問題