我想更新一个表的列,在执行时将在文本框中输入列名。以下代码未执行任何操作。 TextBox14包含列名,TextBox12包含要更新的值。
Dim squery As String = "SELECT name,days from definedLeave"
Dim cmd6 As SqlCommand = New SqlCommand(squery, con)
Dim dr6 As SqlDataReader = cmd6.ExecuteReader()
Dim i As Integer = 0
While dr6.Read()
Try
s = dr6(i).ToString
TextBox14.Text = s
a = dr6(i + 1).ToString
TextBox12.Text = a
Dim sql = "update empLeave set " & TextBox14.Text.Trim & "=@na where epid='" + txtCode.Text + "'"
Using com7 = New SqlCommand(sql, con)
com7.Parameters.AddWithValue("@na", TextBox12.Text)
com7.ExecuteNonQuery()
End Using
Catch ex As Exception
MsgBox("HELLO")
End Try
End While
com7.Dispose()
dr6.Close()
答案 0 :(得分:0)
试试这个
Dim sql as string= "update empLeave set " & TextBox14.Text.Trim & "=@na where
epid='" + txtCode.Text + "'"
Using com7 = New SqlCommand(sql, con)
com7.Parameters.AddWithValue("@na", TextBox12.Text)
com7.ExecuteNonQuery()
End Using
答案 1 :(得分:0)
不幸的是,参数只能用于值,而不能用于标识符。它们就像VB中的变量一样 - 你不能使用一个变量的内容代表VB中的另一个变量。
愚蠢的是,您尝试使用参数,然后尽可能地使用epid
值,您可以使用字符串连接。您的代码应如下所示:
Dim sql = "UPDATE empleave SET [" & TextBox14.Text & "] = @na WHERE epid = @epid"
Using com7 = New SqlCommand(sql, con)
com7.Parameters.AddWithValue("@na", TextBox12.Text)
com7.Parameters.AddWithValue("@epid", txtCode.Text)
com7.ExecuteNonQuery()
End Using
尽管如此,仍然会让您对SQL注入开放,因此您应该首先确保先验证列名。实际上,您应该首先查询数据库以获取列名,然后将它们放在ComboBox
中。这样,您可以保证用户将选择有效值。