Почему адресный знак @ используется при построении команды SQL?
Возможный дубликат:
Что такое @ перед строкой для.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();
}
}
Я просто знаком с @
знаки при объявлении параметров хранимой процедуры.
1 ответ
Это означает, что строка является дословным строковым литералом. \
не будут относиться по-особенному. \n
не новая строка, это косая черта и п. Очень полезно для дорожек.
Обычно иметь строку, содержащую C:\Windows\myfile.txt
вам нужно будет написать "C:\\Windows\\myfile.txt"
ИЛИ с дословными строковыми литералами @"C:\Windows\myfile.txt"
,
Это описано в 2.4.4.5 Строковые литералы спецификации C#:
Строковый литерал состоит из символа @, за которым следует символ двойной кавычки, ноль или более символов и закрывающий символ двойной кавычки. Простой пример - @"привет". В дословном строковом литерале символы между разделителями интерпретируются дословно, единственное исключение составляет кавычка-escape-последовательность. В частности, простые escape-последовательности, а также шестнадцатеричные и Unicode escape-последовательности не обрабатываются в дословных строковых литералах. Строковый литерал может содержать несколько строк.
Я добавлю, что в блоке SQL, который вы цитировали, он используется для написания сценария в несколько строк без закрытия каждой строки строкой. Так вот
string str = "A " +
"B " +
"C";
ты можешь написать
string str = @"A
B
C";
Имейте в виду, что две строки очень разные! Второй содержит конец строк и пробелы выравнивания, но в SQL это не проблема (во многих местах в SQL пустое пространство игнорируется).
Есть вероятность, что вы написали команду SQL в одну строку. Тогда @
был совершенно бесполезным, но многие программисты приняли "лучше, чем потом сожалеть" и довольно обильно его посыпали, особенно когда они вставляли текст откуда-то еще, что могло бы содержать \ escapes
:-)