从vb.net文本框中删除oracle中的行

时间:2018-09-26 05:39:23

标签: vb.net oracle plsql

如何基于vb.net文本框中的值删除oracle表中的所有行? 此代码仅从oracle表的文本框中删除第一行:

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'名称'不是'OracleParameterCollection'的成员
  • 未定义BC30002类型'StringBuilder'。
  • BC30456'AddWithValue'不是'OracleParameterCollection'的成员。
  • BC30455未为“公共函数Str(作为对象的对象)作为字符串的参数”的参数“ Number”指定参数。

1 个答案:

答案 0 :(得分:0)

@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