2017-02-13 2 views
1

I가 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에서 확인한 다음 두 번째 루프에서 "parameter @ par1 already defined"와 같은 예외를 확인합니다. 다시 정의 할 수있는 방법이 있습니까? 전체 API에 완전히 익숙하지 않습니다.

또한이 방법을 반복하는 것이 가장 좋은 방법 일지 모르지만 100 % 확신 할 수는 없지만 내 머리 속으로 튀어 나온 것은 처음입니다. 이 일을 대신 할 수있는 방법을 제안하십시오.

+0

addwinvalue 메서드가 아닌 add 메서드를 사용하여 루프 외부에서 cmd를 빌드하십시오. 그런 다음 루프에서 .Value (Name) = 값을 사용합니다. 또한 모든 루프를 열거 나 닫지 마십시오. 그 주위에 루프 –

+0

조언 주셔서 감사합니다! – robotHamster

답변

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 
  • 코드는 그가 경솔한되고, 글로벌 연결을 다시 나타납니다. 위는 그래서 당신이 데이터 유형을 지정하는 대신하여 DB 제공자 추측을 강제하고을 줄일 수 있습니다
  • 당신은 오히려 AddWithValue보다 Add을 선호한다, 사용을 작성하고 가능한 가장 작은 범위의 DbConnectionDbCommand 개체를 삭제하는 Using 블록을 사용 데이터 유형 불일치 오류 가능성.
  • 이러한 데이터 유형은 추측입니다. CurrentId은 어디에도 정의되어 있지 않으며 이름이 주어지면 둘 다 문자열이 아닌 정수로 보입니다.
+0

DB에있는 데이터 유형이 정수이기 때문에 거기에서 정확합니다. 이제 AddWithValue를 통해 Add Addith를 추가 할 예정입니다. 한 가지 질문에이 점에 분명합니다. 나는 각 루프의 시작 부분에'cmd.Parameters.Clear()'를 가지고 이전에 가지고 있던 문제를 수정했다. 좋은 연습이 아닌가? @Plutonix – robotHamster

+0

클리어 사용 : 코드에 따라 다릅니다. 그것은 나쁜 아이디어는 아니지만 때로는 하나 또는 두 가지가 고정되어 있습니다. 즉 루프마다 변경되지 않으므로 모든 루프에서 다시 설정해야합니다.하지만 매우 사소한 것입니다. –

+1

@sharifanani 왜 정말로 필요한 것이 모두 새로운 값을 제공 할 때 동일한 매개 변수를 반복하고 다시 작성해야합니까? 'Clear()'는 작동하지만 과잉입니다 – Plutonix