如何基于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的注释一样,但是出现了这个错误:
答案 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