Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将文本框控件中的值传递到;从「;条款_Sql Server_Vb.net - Fatal编程技术网

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,他当时是对的。虽然在我编辑后,我认为我不配,但没关系:)