为什么这是不可能的:
... new DB().ExecuteQuery<String>(@"Select {0} From {1} ", selectParam, tableParam);
这会引发以下异常:必须声明表变量“@ p1”。
谢谢
答案 0 :(得分:3)
@ 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注入请阅读
答案 1 :(得分:0)
我猜错误与T-SQL Table Variables有关。
@ - 引用的字符串文字以@开头,并用双引号括起来。例如:
@"good morning" // a string literal
@ -quoting的优点是不处理转义序列,这使得它易于编写,例如,完全限定的文件名:
@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"
要在@ -quoted字符串中包含双引号,请将其加倍:
@"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.
@符号的另一个用途是使用恰好是C#关键字的引用(/reference)标识符。有关详细信息,请参阅2.4.2 Identifiers。
答案 2 :(得分:0)
这不完全和回答,更确认它与@“”字符串没有任何关系,但它似乎是ExecuteSqlCommand和SqlQuery中参数替换的限制。
我遇到与您相同的问题,发现您无法提供表名作为参数。我有一个以下形式的命令:
Context.Database.ExecuteSqlCommand(@"Delete From MyTable WHERE MyColumn = {0}", someValue);
工作正常,但如果我尝试将MyTable作为参数提供,则会失败。
如果您考虑一下,表名实际上并不适合作为参数,因此拒绝它是有意义的。但是我同意你的看法,错误信息真的没那么有用。