从服务器更新文本框中指定的列

时间:2014-06-26 06:05:41

标签: sql-server vb.net

我想更新一个表的列,在执行时将在文本框中输入列名。以下代码未执行任何操作。 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()

2 个答案:

答案 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中。这样,您可以保证用户将选择有效值。