Почему адресный знак @ используется при построении команды 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:-)

Другие вопросы по тегам