如何将TextBox控件中的值传递给" FROM"的SQL语句。条款

时间:2017-04-24 14:20:41

标签: sql-server vb.net

我正在尝试将值从TextBoxtxtTableNumber.Text)传递到我的SQL中,用于" FROM"条款。

我使用以下代码:

Private Sub cmdDelete_Click(sender As Object, e As EventArgs) Handles cmdDelete.Click
    For Each row As DataGridViewRow In dgvSales.SelectedRows
        SQL.DataUpdate("DELETE FROM '" + txtTableNumber.Text + "' WHERE sl ="1" ")
    Next
End sub

2 个答案:

答案 0 :(得分:1)

目前您对SQL注入非常开放,因此这就是推荐参数的原因。

由于您传递的是一个表名,这可能会有点困难,但我认为这应该可以为您提供所需信息:

"DECLARE @DynamicSQL NVARCHAR(1000) = N'DELETE FROM ' + @GetTableName + ' WHERE sl = ''1''' EXECUTE sp_executesql @DynamicSQL"

然后,您需要将参数@GetTableName添加到SQL.DataUpdate并为其指定txtTableNumber.Text的值。

由于字符串看起来有点混乱,您可能需要考虑使用存储过程来处理它。再次传递@GetTableName参数。

我不确定你宣称SQL是什么。通常我使用SqlCommand类来执行我的SQL。像这样:

Using con As New SqlConnection(connectionString),
      cmd As New SqlCommand("DECLARE @DynamicSQL NVARCHAR(1000) = N'DELETE FROM ' + @GetTableName + ' WHERE sl = ''1''' EXECUTE sp_executesql @DynamicSQL", con)

    con.Open()

    cmd.Parameters.Add("@GetTableName", SqlDbType.NVarChar).Value = txtTableNumber.Text

    cmd.ExecuteNonQuery()

End Using

如果您能澄清SQL是什么,我可以提供更好的解决方案。

答案 1 :(得分:-1)

只需删除表名周围的',然后将其添加到sl部分:

SQL.DataUpdate("DELETE FROM " + txtTableNumber.Text + " WHERE sl ='1' ")

无论如何,你必须小心这句话。如果您的txtTableNumber有人写yourTableName;drop yourTableName; --,那么您的表格将会被删除。这就是为什么不推荐使用表名作为字符串创建动态字符串的原因。您最好使用case语句来验证输入,例如:

Select Case txtTableNumber.Text
    Case "Table1"
        SQL.DataUpdate("DELETE FROM Table1 WHERE sl ='1' ")
        Exit Select
    Case "Table2"
        SQL.DataUpdate("DELETE FROM Table2 WHERE sl ='1' ")
        Exit Select
   ...
End Select