为啥在构建SQL命令时使用地址符号@? [复制]
Posted
技术标签:
【中文标题】为啥在构建SQL命令时使用地址符号@? [复制]【英文标题】:Why is the address sign @ used in building SQL command? [duplicate]为什么在构建SQL命令时使用地址符号@? [复制] 【发布时间】:2011-11-09 10:29:09 【问题描述】:可能重复:What's the @ in front of a string for .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();
我只是在声明存储过程的参数时熟悉@
符号。
【问题讨论】:
这让我想哭。 .NET 对占位符有很好的支持。请使用它。您正在寻找的是verbatim literal strings - 请参阅示例。 这是一个带引号的字符串文字,它与sql或参数无关。 msdn.microsoft.com/en-us/library/362314fe(v=vs.71).aspx @pst:如果 OP 询问其目的是什么,那么可以说他/她不是代码的作者,而是希望了解它在做什么。 @Yuck 这就是链接的用途,自然。 是的,我正在尝试理解别人的代码。我为什么要问我是否是首先编写代码的人。尽管如此,还是感谢您的光临。 【参考方案1】:这意味着该字符串是逐字字符串文字。 \
不会以特殊方式处理。 \n
不是新行,它是斜线和 n。对路径非常有用。
通常,如果字符串包含 C:\Windows\myfile.txt
,您需要编写 "C:\\Windows\\myfile.txt"
或使用逐字字符串文字 @"C:\Windows\myfile.txt"
。
这在 C# 规范的 2.4.4.5 String literals 中有介绍:
逐字字符串文字由一个@字符后跟一个双引号字符、零个或多个字符以及一个结束双引号字符组成。一个简单的例子是@"hello"。在逐字字符串文字中,分隔符之间的字符被逐字解释,唯一的例外是引号转义序列。特别是,简单的转义序列以及十六进制和 Unicode 转义序列不会在逐字字符串文字中进行处理。逐字字符串文字可能跨越多行。
我将在您引用的 SQL 块中添加它用于能够在多行中编写脚本而无需关闭字符串的每一行。如此安装
string str = "A " +
"B " +
"C";
你可以写
string str = @"A
B
C";
请注意,这两个字符串非常不同!第二个包含行尾和对齐空间,但在 SQL 中这不是问题(SQL 中的许多地方都会忽略空格)。
您有可能在一行中编写了 SQL 命令。然后@
完全没用,但是许多程序员采用“比抱歉更安全”并且非常随意地使用它,尤其是当他们从其他地方粘贴可能包含\ escapes
的文本时:-)
【讨论】:
我要感谢引用的魔法仙女,它添加了我链接的页面的标题和文本的引用! :-) 知道在你帮助别人的同时有好仙女帮助你总是很高兴:-) :-)以上是关于为啥在构建SQL命令时使用地址符号@? [复制]的主要内容,如果未能解决你的问题,请参考以下文章