防止创建语句的 sql 注入有意义吗?我怎么能这样做?我想使用命令参数,但它不起作用:
例子:
var createSql = "CREATE TABLE @TableName (@Column1 ...)";
var command = new SqlCommand();
command.CommandText = createSql;
command.Parameters.AddWithValue("@TableName", "XYZ");
command.Parameters.AddWithValue("@Column1", "Col");
// somewhere else
command.Connection = connection;
command.ExecuteNonReader(); // --> exception: invalid syntax at @TableName
编辑: Column 和 TableNames 是根据其他数据生成的。也间接在用户输入上,是的。给定的 create 语句不完整。这只是一个例子。
我的问题是,命令参数似乎没有被替换。