Sql server 如何将文本框控件中的值传递到;从「;条款
我正在尝试将Sql server 如何将文本框控件中的值传递到;从「;条款,sql-server,vb.net,Sql Server,Vb.net,我正在尝试将文本框(txtTableNumber.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
)中的值传递到我的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
只需删除表名周围的
”
,并将其添加到sl
部分:
SQL.DataUpdate("DELETE FROM " + txtTableNumber.Text + " WHERE sl ='1' ")
无论如何,你必须小心这句话。如果在你的txtablenumber
中有人写了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
目前,您对SQL注入非常开放,因此建议使用参数
因为您要传递一个表名,所以这可能会有点困难,但我认为这应该会告诉您您想要什么:
"DECLARE @DynamicSQL NVARCHAR(1000) = N'DELETE FROM ' + @GetTableName + ' WHERE sl = ''1''' EXECUTE sp_executesql @DynamicSQL"
然后需要将参数@GetTableName
添加到SQL.DataUpdate
中,并将txtablenumber.Text
的值分配给它
<>因为字符串看起来有点乱,您可能需要考虑使用存储过程来处理这个问题。再次传递@GetTableName
参数
我不确定您所声明的SQL
as是什么。通常我使用这个类来执行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
,我也许能提供一个更好的解决方案。研究使用参数。你不能使用WHERE sl=“1”“
,但是sl='1'
…当然,如果sl
是字符串/文本数据type@BugsOP希望从文本框中获取的是表名,而不是任何参数(如果我了解OP想要什么)如果用户输入'sometable;drop sometable;-'?@Pikoh yes我想要文本框中的值。@SeanRange您一切正常。编辑以添加解释和替代选项solution@Pikoh非常感谢您的帮助。非常感谢。谢谢@Pikoh.作为参考(如果您想知道,我知道我知道),我没有投你的反对票。我只是提供了一个备选答案。如果我投了,你会知道,我会留下评论。别担心,我知道可能是@SeanLange,他当时是对的。虽然在我编辑后,我认为我不配,但没关系:)