Удалить строки в оракуле из текстового поля vb.net - PullRequest
0 голосов
/ 26 сентября 2018

Как удалить все строки в таблице оракулов на основе значений в текстовом поле vb.net?Этот код удаляет только первую строку из текстового поля в таблице оракулов:

For Each name As String In TextBox1.Text.Split(vbNewLine)
str = "Delete from table_1 where column1 in ('" & name & "')"   

Где я ошибаюсь с этим кодом?

Imports Oracle.DataAccess.Client
Imports Oracle.DataAccess.Types
Public Class Form1

Private cmd As OracleCommand
Private da As OracleDataAdapter
Private cb As OracleCommandBuilder
Private ds As DataSet

Private Sub Connect_Click(sender As Object, e As EventArgs) Handles Connect.Click


    Dim conn As New OracleConnection
    Dim cmd As New OracleCommand

    cmd.CommandType = CommandType.Text
    Dim lstParameterValues As New List(Of String)
    Dim HardReturn As String() = {vbNewLine}
    Dim query As New StringBuilder("Delete from table_1")


    Try

        If conn.State = ConnectionState.Closed Then
            conn.ConnectionString = "User Id=" + "fghfhfh" &
      ";Password=" + "353525346" &
      ";Data Source=" + " dfgdg "
            conn.Open()
        End If


        Connect.Enabled = False



        For Each name As String In TextBox1.Text.Split(HardReturn, StringSplitOptions.RemoveEmptyEntries)
            lstParameterValues.Add(name)
        Next

            Select Case lstParameterValues.Count
                Case 1
                    query.Append(" WHERE column1 = @column1")
                cmd.Parameters.name("@column1", lstParameterValues(0))
            Case Is > 1
                    query.Append(" WHERE column1 IN (")

                    Dim paramName As String

                    For index As Integer = 0 To lstParameterValues.Count - 1 Step 1
                        paramName = "@column1" & index

                        If index > 0 Then
                            query.Append(", ")
                        End If

                        query.Append(paramName)
                        cmd.Parameters.AddWithValue(paramName, lstParameterValues(index))
                    Next index

                    query.Append(")")
            End Select



        cmd = New OracleCommand(str, conn)
            da = New OracleDataAdapter(cmd)
            cb = New OracleCommandBuilder(da)
            ds = New DataSet()

            da.Fill(ds)


    Finally

        Connect.Enabled = True

    End Try

End Sub
End Class       

Код улучшен как комментарии @mary, но я получил следующие ошибки:

  • BC30456 'name' не является членом 'OracleParameterCollection'
  • BC30002 Тип 'StringBuilder' не определен.
  • BC30456 'AddWithValue' не является членом 'OracleParameterCollection'.
  • BC30455 Аргумент не указан для параметра 'Number' из 'Public FunctionStr (число как объект) как строка '.

1 Ответ

0 голосов
/ 26 сентября 2018

Комментарий и ссылка @jmcilhinney - это то, что вам нужно, потому что параметры необходимы для защиты ваших данных.

 Dim lstParameterValues As New List(Of String)
 Dim HardReturn As String() = {vbNewLine}
 For Each name As String In TextBox1.Text.Split(HardReturn, StringSplitOptions.RemoveEmptyEntries)
     lstParameterValues.Add(name)
 Next

Теперь, когда у вас есть список, просто таким образом подставьте в код @ jmcilhinney ...

    Dim connection As New SqlConnection("connection string here")
    Dim command As New SqlCommand
    Dim query As New StringBuilder("Delete FROM MyTable")
    Select Case lstParameterValues.Count
        Case 1
            query.Append(" WHERE MyColumn = @MyColumn")
            command.Parameters.AddWithValue("@MyColumn", lstParameterValues(0))
        Case Is > 1
            query.Append(" WHERE MyColumn IN (")

            Dim paramName As String

            For index As Integer = 0 To lstParameterValues.Count - 1 Step 1
                paramName = "@MyColumn" & index

                If index > 0 Then
                    query.Append(", ")
                End If

                query.Append(paramName)
                command.Parameters.AddWithValue(paramName, lstParameterValues(index))
            Next index

            query.Append(")")
    End Select

    command.CommandText = query.ToString()
    command.Connection = connection
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...