1

可能重复:
.NET 的字符串前面的 @ 是什么?

这个@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();
    }
}

我只是@在声明存储过程的参数时熟悉这些标志。

4

1 回答 1

12

这意味着该字符串是逐字字符串文字。\不会以特殊方式处理。\n不是新行,它是斜线和 n。对路径非常有用。

通常,要包含一个字符串,C:\Windows\myfile.txt您需要"C:\\Windows\\myfile.txt"使用逐字字符串文字编写 OR @"C:\Windows\myfile.txt"

这在 C# 规范的2.4.4.5 字符串文字中有所介绍:

逐字字符串文字由一个@ 字符后跟一个双引号字符、零个或多个字符以及一个结束双引号字符组成。一个简单的例子是@"hello"。在逐字字符串文字中,分隔符之间的字符被逐字解释,唯一的例外是引号转义序列。特别是,简单的转义序列以及十六进制和 Unicode 转义序列不会在逐字字符串文字中进行处理。逐字字符串文字可能跨越多行。

我将在您引用的 SQL 块中添加它用于能够在多行中编写脚本而无需关闭字符串的每一行。所以安装

string str = "A " + 
    "B " + 
    "C";

你可以写

string str = @"A
    B
    C";

请注意,这两个字符串非常不同!第二个包含行尾和对齐空间,但在 SQL 中这不是问题(SQL 中的许多地方都忽略了空格)。

您有可能在一行中编写了 SQL 命令。然后@是完全没用的,但是许多程序员采用“比抱歉更安全”并且相当自由地使用它,特别是当他们从其他可能包含的地方粘贴文本时\ escapes:-)

于 2011-09-02T19:18:12.620 回答