添加参数的问题

时间:2011-05-09 12:01:47

标签: c# ado.net parameters

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”。

为什么我会收到此错误以及如何解决?

3 个答案:

答案 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