C# 添加参数的问题

C# 添加参数的问题,c#,ado.net,parameters,C#,Ado.net,Parameters,上述代码导致以下错误消息: 必须声明表变量“@name” 为什么会出现此错误以及如何修复此错误?参数化查询通常处理查询中值的参数,而不是表名、列名等。我认为SQL Server不支持参数化表名 您可能希望将名称限制为一组已知的有效表名(以避免SQL注入攻击等),并使用普通的字符串替换/格式化/任何方式来构造查询。错误的查询 SqlParameter param = new SqlParameter(); param.ParameterName = "@name"; param.Value = t

上述代码导致以下错误消息:

必须声明表变量“@name”


为什么会出现此错误以及如何修复此错误?

参数化查询通常处理查询中值的参数,而不是表名、列名等。我认为SQL Server不支持参数化表名

您可能希望将名称限制为一组已知的有效表名(以避免SQL注入攻击等),并使用普通的字符串替换/格式化/任何方式来构造查询。

错误的查询

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();
请更正它,在预计来自表或视图名称的
之后,您应该将您的参数像
'select*From MyTable,其中col1=@param'


不能将@param替换为表名。使用
String.Format(“select*from{0}”,“MyTable”)

不必在查询中传递名称,您可以在此处轻松替换它

select * from @name
但这将导致sql注入错误


因此,我建议您在sql server中执行动态查询,您可以使用SP_ExecuteSQL

执行动态查询,这是正确的。不能在SQL Server中使用参数作为表名。SqlCommand cmd=new SqlCommand(“select*from”+tableName,con);?或者可能存在更好的方法?@Aram:类似的,是的-或者可能使用
string.Format
。不过,对于动态生成的SQL,您需要非常小心。不,我不需要任何条件。我只想从给定表中获取所有列。不能将@param替换为表名。使用String.Format(“select*from{0}”,“MyTable”);相反,谢谢你,我写下你的话。我只是想用另一种方式来写它。@Aram Gevorgyan-在这个查询中,名称值可以被更改为sql server查询不可接受的任何内容。。。。。。。。。但是,请使用SQ_EXECUTESQL解决您的问题easily@PranayRana我不这么认为,因为这些名称来自wihch中的winform,我有表,单击它们我会显示表内容,所以名称必须是正确的。但是谢谢你的帮助。您能告诉我在哪里可以阅读更多关于SQ_EXECUTESQL的信息吗?@Aram Gevorgyan-sp_EXECUTESQL的链接
string s = "select * from " + name;
SqlCommand cmd = new SqlCommand(s, con);
SqlDataReader rd = cmd.ExecuteReader();