C# 为什么在生成SQL命令时使用地址符号@?

C# 为什么在生成SQL命令时使用地址符号@?,c#,string,verbatim-string,C#,String,Verbatim String,可能重复: 这个SQL命令中的@在做什么?它的第一次和第二次出现是否会达到同样的目的 static DataTable StaffsGetProjectIDHRCoordinators(SqlConnection conn, string targetDatabase) { try { SqlCommand cmd = new SqlCommand(@" SELECT DISTINCT Staff.* FROM S

可能重复:

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

我只熟悉声明存储过程参数时的
@
符号。

这意味着字符串是逐字逐句的字符串文字。
\
不会以特殊方式处理<代码>\n不是新行,它是斜杠和n。对于路径非常有用

通常,要使字符串包含
C:\Windows\myfile.txt
,您需要编写
“C:\\Windows\\myfile.txt”
,或使用逐字字符串文本
@“C:\Windows\myfile.txt”

这包括在C#规范的第1部分中:

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

我将在您引用的SQL语句块中添加一点,它用于在不关闭字符串中的每一行的情况下编写多行脚本。如此代替

string str = "A " + 
    "B " + 
    "C";
你可以写

string str = @"A
    B
    C";
请注意,这两个字符串非常不同!第二个包含行尾和对齐空格,但在SQL中这不是问题(在SQL中的许多地方,空空格被忽略)


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

的文本时,这意味着该字符串是一个逐字的字符串文字。
\
不会以特殊方式处理<代码>\n不是新行,它是斜杠和n。对于路径非常有用

通常,要使字符串包含
C:\Windows\myfile.txt
,您需要编写
“C:\\Windows\\myfile.txt”
,或使用逐字字符串文本
@“C:\Windows\myfile.txt”

这包括在C#规范的第1部分中:

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

我将在您引用的SQL语句块中添加一点,它用于在不关闭字符串中的每一行的情况下编写多行脚本。如此代替

string str = "A " + 
    "B " + 
    "C";
你可以写

string str = @"A
    B
    C";
请注意,这两个字符串非常不同!第二个包含行尾和对齐空格,但在SQL中这不是问题(在SQL中的许多地方,空空格被忽略)


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

的文本时,这让我很想哭。NET非常支持占位符。请用它。您要查找的是--参见示例。它是一个带引号的字符串文本,与sql或参数无关@pst:如果OP问它的目的是什么,它就说明他/她不是代码的作者,并且希望了解它在做什么。@当然,这就是链接的目的。是的,我试图理解其他人的代码。为什么我会问我是不是第一个编码它的人。尽管如此,还是谢谢你的光临。这让我想哭。NET非常支持占位符。请用它。您要查找的是--参见示例。它是一个带引号的字符串文本,与sql或参数无关@pst:如果OP问它的目的是什么,它就说明他/她不是代码的作者,并且希望了解它在做什么。@当然,这就是链接的目的。是的,我试图理解其他人的代码。为什么我会问我是不是第一个编码它的人。感谢您的光临。我要感谢神奇的引语仙女,她添加了我链接的页面标题和文本的引语!:-)当你帮助别人的时候,知道有好仙女帮助你总是很好的:-):-)我要感谢神奇的引用仙女,她添加了我链接的页面标题和文本的引用!-)当你帮助别人时,知道有好仙女帮助你总是很好的:-):-)