我正在尝试通过在删除SQL Server索引时使用参数来遵循最佳实践(并且还删除Visual Studio代码分析警告).
不使用参数工作正常:
string tableName = "dbo.TableName"; SqlCommand sqlCommand = new SqlCommand("DROP INDEX Blah ON " + tableName); sqlCommand.Connection = sqlConnection; sqlCommand.ExecuteNonQuery();
但是,当我尝试使用参数时,我收到错误
Incorrect syntax near ‘@TableName’.
码:
string tableName = "dbo.TableName"; SqlCommand sqlCommand = new SqlCommand("DROP INDEX Blah ON @TableName"); sqlCommand.Parameters.Add(new SqlParameter("TableName", tableName)); sqlCommand.Connection = sqlConnection; sqlCommand.ExecuteNonQuery();我究竟做错了什么?
你没有做错任何事.参数不能用于替换标识符 – 列名称/别名,表名称/别名,模式名称和数据库名称.它们也不能用于替换函数名称或运算符或关键字.这是一个很长的清单.它们可用于替换查询中的常量.
我想记住这个的方法是参数化查询可以预编译.为了编译查询,需要解析所有对象引用 – 因此参数不能提供值.
您已经通过将表放在字符串中来解决问题.您可以使用quotename()来帮助防止注射(参见here).
查看更多关于在C#中使用SQL参数DROP INDEX的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did69311