SqlParameter C#上的表名和表字段?

我想知道如何通过C#上的SqlCommand传递表名和表字段名。

尝试通过使用@符号设置SqlCommand但不起作用来完成它。 有任何想法吗??

如果您担心SQL注入, SqlCommandBuilder类(以及其他特定于DB的DbCommandBuilder版本)都有一个名为QuoteIdentifier的函数,它将正确地转义您的表名。

var builder = new SqlCommandBuilder(); string escTableName = builder.QuoteIdentifier(tableName); 

现在,您可以在构建语句时使用转义值,而不必担心注入 – 但您仍应使用任何值的参数。

我想你正在尝试执行像这样的sql语句

 select @field from @table 

但那不行。 Sql不能在字段名或表名上有参数,只能在值上。

如果我的猜测不正确,请扩展您的问题。

SqlCommand参数只能用于传递数据。 您不能使用它们来修改sql语句(例如向select语句添加其他字段)。 如果你需要修改sql语句,我建议使用StringBuilder来创建tsql语句。

为了进一步说明,.Net在将sql发送到SqlServer之前不会连接它(至少不是你想象的直接方式)。 它实际上调用存储过程并单独传递参数。 这允许Sql Server缓存查询计划并优化tsql的性能。

如果你要编写这个SqlCommand …

 var cmd = new SqlCommand("SELECT * FROM MyTable WHERE MyID = @MyID", conn); cmd.Parameters.AddWithValue("@MyID", 1); cmd.ExecuteNonQuery(); 

这是发给Sql Server的tsql …

 exec sp_executesql N'SELECT * FROM MyTable WHERE MyID = @MyID',N'@MyID int',@MyID=1 

您可以在MSDN上阅读有关sp_executesql的更多信息。