我收到运行时错误说"Must declare the table variable "@parmTableName"
。这意味着不允许在 sql 语句中将表名作为 sql 参数。
是否有比允许 sql 注入攻击更好的选择或建议?我不想为 sql 语句执行此 C# 脚本" DELETE FROM " + tableName + " "
;
using(var dbCommand = dbConnection.CreateCommand())
{
sqlAsk = "";
sqlAsk += " DELETE FROM @parmTableName ";
sqlAsk += " WHERE ImportedFlag = 'F' ";
dbCommand.Parameters.Clear();
dbCommand.Parameters.AddWithValue("@parmTableName", tableName);
dbConnection.Open();
rowAffected = dbCommand.ExecuteNonQuery();
}
去获取白名单。只能有一组固定的possible无论如何,表名的值是正确的 - 至少,所以我希望如此。
如果您没有表名白名单,您可以从以下白名单开始:人物- 如果你将其限制为 A-Z、a-z 和 0-9(根本没有标点符号),那么应该可以消除很多担忧。 (当然,这意味着您不支持具有奇怪名称的表......我们真的不知道您的要求。)
但是不行,您不能将参数用于表名或列名,只能使用值。这在数据库中是典型的情况;我不记得见过哪一个did支持参数。 (我敢说当然有一些......)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)