为什么地址符号@用于构建SQL命令?

KTm*_*ury 1 c# string verbatim-string

可能重复:
.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();
    }
}
Run Code Online (Sandbox Code Playgroud)

@在声明存储过程的参数时,我只是熟悉这些符号.

xan*_*tos 12

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

通常有一个包含C:\Windows\myfile.txt你的字符串需要"C:\\Windows\\myfile.txt"用逐字字符串文字写OR @"C:\Windows\myfile.txt".

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

逐字字符串由一个@字符后跟一个双引号字符,零个或多个字符,并且结束的双引号字符的.一个简单的例子就是@"你好".在逐字字符串文字中,分隔符之间的字符是逐字解释的,唯一的例外是quote-escape-sequence.特别是,简单的转义序列和十六进制和Unicode转义序列不会在逐字字符串文字中处理.逐字字符串文字可以跨越多行.

我将在你引用的SQL块中添加它,它用于能够在多行中编写脚本而不关闭字符串的每一行.如此绝对

string str = "A " + 
    "B " + 
    "C";
Run Code Online (Sandbox Code Playgroud)

你可以写

string str = @"A
    B
    C";
Run Code Online (Sandbox Code Playgroud)

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

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