Dim tbl as String = Request.QueryString("tb") 'tb value = User
Dim sql As String = "Select * From @table Where @Col = @ColVal"
Dim para As New SqlParameter
para.ParameterName = "table"
para.Value = tbl
Dim paraArray1 As New SqlParameter
paraArray1.ParameterName = "@Col"
paraArray1.Value = "Name"
Dim paraArray2 As New SqlParameter
paraArray2.ParameterName = "@ColVal"
paraArray2.Value = "Stephen"
当我尝试使用DbDataAdapter运行“sql”命令时,它给了我这个错误
必须声明表变量“@table”。描述:未处理 在执行当前Web请求期间发生异常。 请查看堆栈跟踪以获取有关错误的更多信息 它起源于代码。
异常详细信息:System.Data.SqlClient.SqlException:必须声明 表变量“@table”。
请建议我应该怎么做以给定的表名作为参数运行sql并避免sql注入。非常感谢!
答案 0 :(得分:2)
参数与存储过程相关,您无法在内联查询中指定它们。您需要在查询中连接参数。
为避免SQL注入,最好的方法是使用存储过程,但如果需要使用内联查询,请在进行内联查询之前检查值。
答案 1 :(得分:0)
正确编写表的参数名称..
para.ParameterName = "@table"
使用SqlParameter
以某种方式避免Sql注入,因为参数永远不会直接插入语句.....
答案 2 :(得分:0)
参数仅对值有效。更改SQL字符串:
Dim sql As String = String.Format("Select * From {0} Where {1} = @ColVal",tableName,ColName)