SqlParameter param = new SqlParameter();
param.ParameterName = "@name";
param.Value = tableName;
SqlCommand cmd = new SqlCommand("select * from @name", con);
cmd.Parameters.Add(param);
SqlDataReader rd = cmd.ExecuteReader();
以上代码会导致以下错误消息:
必须声明表变量“@name”。
为什么我会收到此错误以及如何解决?
答案 0 :(得分:4)
参数化查询通常处理查询中值的参数 - 而不是表名,列名等。我不相信SQL Server支持参数化表名。
您可能希望将名称限制为一组已知的有效表名(以避免SQL注入攻击等),并使用常规字符串替换/格式化/任何来构造查询。
答案 1 :(得分:2)
查询错误
select * from @name
请更正,预计在From
表格或视图名称出现后,您应该将您的参数设置为'select * from MyTable where col1 = @param'
。
你不能把@param而不是表名。请改用String.Format("select * from {0}", "MyTable");
。
答案 2 :(得分:1)
而不是在查询中传递名称,您可以轻松地在此处替换它
string s = "select * from " + name;
SqlCommand cmd = new SqlCommand(s, con);
SqlDataReader rd = cmd.ExecuteReader();
但这会导致sql注入错误
所以我建议您在sql server中执行dyanmic查询执行,可以使用 SP_ExecuteSQL 。