LINQ-to-SQL:为什么不能使用表名作为参数?



为什么不可能:

... new DB().ExecuteQuery<String>(@"Select {0} From {1} ", selectParam, tableParam);

这会抛出如下异常:必须声明表变量"@p1".

谢谢

@  before the "" says to compiler that this is a string nothing else

阅读这里http://msdn.microsoft.com/en-us/library/362314fe(v=vs.71).aspx

Must declare the table variable "@p0"似乎不同

Edited:不要使用表名作为参数,最好只使用表名,否则会导致sql注入,请阅读

http://en.wikipedia.org/wiki/SQL_injection

我猜这个错误与T-SQL表变量有关。


@用双引号括起来,以@开头。例如:

@"good morning"  // a string literal
@-引号的优点是不处理转义序列,这使得编写(例如,完全限定文件名)变得容易:
@"c:DocsSourcea.txt"  // rather than "c:\Docs\Source\a.txt"

要在@引号字符串中包含双引号,请将其双引号括起来:

@"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.

@符号的另一个用途是使用引用(/reference)标识符,而这些标识符恰好是c#关键字。更多信息请参见2.4.2标识符。

这不是完全的答案,更多的是确认它与@"字符串无关,但它似乎是ExecuteSqlCommand和SqlQuery中的参数替换的限制。

我有和你一样的问题,发现你不能提供表名作为参数。我有一个命令的形式是:

Context.Database.ExecuteSqlCommand(@"Delete From MyTable WHERE MyColumn = {0}", someValue);

这工作得很好,但如果我试图提供MyTable作为参数,它会失败。

如果你考虑一下,表名不适合作为参数,所以拒绝它是有道理的。然而,我同意你的观点,错误信息真的没有那么有用。

相关内容

  • 没有找到相关文章

最新更新