通过在Visual Basic中传递参数来删除SQL表

时间:2019-05-03 23:49:47

标签: sql sql-server visual-studio parameters

尝试创建一个函数,该函数将使用表名的参数在sql server中删除表。

我尝试过的大多数操作都是使用查询的文本和间距并将值直接传递给。直接在函数中传递值非常好,但是我无法使参数正常工作。

    Private Sub DeleteTable(tablename As String)
        'Add sql params and run command
        SQL.AddParam("@thistablesname", tablename.ToString)

        SQL.ExecQuery("DROP TABLE @thistablesname;", True)
        'SQL.ExecQuery("DROP TABLE Iamanewtable;", True) 'works

        'Report and abort on errors
        If SQL.HasException(True) Then Exit Sub

        MsgBox("Table may have been deleted successfully")

    End Sub

2 个答案:

答案 0 :(得分:1)

只要您的数据是干净的,您应该能够直接使用名称构建字符串并在不进行参数化的情况下执行它,但是要小心SQL-Injection。

在稍微安全的方法上,您可以使用两个sql查询。首先,查询数据库以查看是否存在实际的表名

SELECT TABLE_NAME 
   FROM INFORMATION_SCHEMA.TABLES 
   WHERE TABLE_TYPE = 'BASE TABLE' 
   AND TABLE_SCHEMA = @parmTable

添加表名称作为参数并执行查询。如果查询结果返回的行计数为1,则表明您具有很好的价值。然后,您可以直接使用

构建字符串
SQL.ExecQuery( "DROP TABLE " + tablename.ToString, True )

由于通过合格的第一个查询对尝试使用的整个表名进行了资格预审,因此可以删除它而不必担心SQL注入。

如果这将是一个常见的过程,您甚至可以创建一个自己的函数,即传递表名的参数,该参数会执行检查和动态SQL操作以将表拖放到该表中。

答案 1 :(得分:-1)

像这样尝试:

SqlCommand cmd = new SqlCommand("DROP TABLE @thistablesname;", cn)
cmd.Parameters.Add(new SqlParameter("@thistablesname", tablename));
cmd.ExecuteReader();