Создайте соединение и команду вне l oop. Единственное, что меняется внутри l oop, - это значение параметра. Откройте соединение один раз за пределами l oop.
CommandType.Text
является значением по умолчанию для .CommandType
и не требует явного указания.
Используйте блок Using...End Using
для убедитесь, что ваши объекты базы данных закрыты и утилизированы даже в случае ошибки.
Обратите внимание, что имени параметра в .CommandText
предшествует двоеточие. Когда имя параметра предоставляется конструктору Parameter, двоеточие отсутствует. Я не проверял это. Это информация от https://docs.microsoft.com/en-us/dotnet/api/system.data.oracleclient.oraclecommand.parameters?view=netframework-4.8 Проверьте последний абзац в Примечаниях.
Private Sub OPCode(selectedRows As List(Of DataGridViewRow))
Using con As New OracleConnection("Your connection String"),
cmd As New OracleCommand("DELETE from sheet1 WHERE Id = :Id", con)
'This will bind parameters by name instead of the order they appear in the command text.
cmd.BindByName = True
cmd.Parameters.Add("Id", OracleDbType.Int32)
con.Open()
For Each row As DataGridViewRow In selectedRows
cmd.Parameters("Id").Value = row.Cells("Id").Value))
Try
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message)
End Try
Next
End Using
End Sub