这个SQL命令中的@
是做什么的?它的第一次和第二次出现是否有同样的目的?
static DataTable StaffsGetProjectIDHRCoordinators(SqlConnection conn, string targetDatabase)
{
try
{
SqlCommand cmd = new SqlCommand(@"
SELECT DISTINCT Staff.*
FROM Staff
INNER JOIN " + targetDatabase.Replace("'", "''") + @".dbo.ProjectHRCoordinator ProjectHRCoordinator
ON Staff.StaffID = ProjectHRCoordinator.HRCoordinatorStaffID
ORDER BY Staff.FName, Staff.LName", conn);
return ExecuteDataTable(cmd);
}
finally
{
if (conn.State != ConnectionState.Closed) conn.Close();
}
}
在声明存储过程的参数时,我只熟悉@
符号。
答案 0 :(得分:12)
这意味着字符串是逐字字符串文字。 \
将不会以特殊方式处理。 \n
不是新行,而是斜线和n。对路径非常有用。
通常要包含一个包含C:\Windows\myfile.txt
的字符串,您需要使用逐字字符串文字"C:\\Windows\\myfile.txt"
来编写@"C:\Windows\myfile.txt"
或。
这涵盖在C#规范的2.4.4.5 String literals中:
逐字字符串文字由@字符后跟双引号字符,零个或多个字符以及结束双引号字符组成。一个简单的例子就是@“你好”。在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence。特别是,简单的转义序列和十六进制和Unicode转义序列不会在逐字字符串文字中处理。逐字字符串文字可能跨越多行。
我将在你引用的SQL块中添加它,它用于能够在多行中编写脚本而不关闭字符串的每一行。
string str = "A " +
"B " +
"C";
你可以写
string str = @"A
B
C";
请注意,这两个字符串非常不同!第二个包含行尾和对齐空格,但在SQL中这不是问题(SQL中的许多地方都会忽略空格。)
您有可能在单行中编写SQL命令。然后@
完全无用,但是许多程序员采用“比安慰更好的安全”并且非常自由地使用它,特别是当它们从其他可能包含\ escapes
的地方粘贴文本时: - )