以下作品:
var s = string.Format("drop table {0};", tableName);
context.Database.ExecuteSqlCommand(s);
但是为了避免注射,我试图使用参数版本
context.Database.ExecuteSqlCommand(@"drop table {0};", tableName);
然而,这给了我一个错误“@ p0'附近的语法不正确。”
我也尝试了?,但我得到了类似的结果。
答案 0 :(得分:1)
表名不能参数化。
为避免注入,您可以做的最好的事情是模拟TSQL QUOTENAME函数。确保表名不超过128个字符。将其换成[]
并将所有嵌入的]
替换为]]
。
基于任意用户输入执行DROP TABLE
本身听起来非常不寻常/有问题。