Мне нравится удалять oracle таблицу нескольких записей через vb. net datagridview, ora 00936 ошибка отсутствующего выражения возникает для ниже кодирования - PullRequest
0 голосов
/ 17 июня 2020
For Each row As DataGridViewRow In selectedRows
    Dim str As String

    str = "DELETE from sheet1 WHERE Id = @Id"

    Dim cmd As OracleCommand = New OracleCommand(str, con)

    cmd.CommandType = CommandType.Text
    cmd.Parameters.Add(New OracleParameter("@Id", row.Cells("Id").Value))

    Try
        con.Open()
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        con.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
Next

Мне нравится удалять несколько записей таблицы oracle через vb. net DataGridView, ora 00936 ошибка пропущенного выражения возникает из-за кода ниже .. если я использую AddWithValue вместо cmd. parameter.add тогда ошибка AddWithValue не является членом oracle.dataAccess.client.oracleparametercollection .. Пожалуйста, помогите мне ..

1 Ответ

0 голосов
/ 18 июня 2020

Создайте соединение и команду вне 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
...