Что делает @ в операторе SQL? - PullRequest
0 голосов
/ 27 сентября 2010

Например, при создании текста команды для оператора SqlServer ce в примере используется

command.CommandText = "INSERT INTO Region (RegionID, RegionDescription) VALUES (@id, @desc)";

Я понимаю, как выполнять SQL-запросы, но всегда просто передавал системе базы данных строку с SQL-операторами. Это ново для меня, и я хотел бы понять. Означает ли символ @, что это переменная, поэтому, когда она анализирует строку, она вставит значение переменной id в строку, где написано @id? Я знаю в php, двойные кавычки позволяют парсеру анализировать значение переменной в строке, и мне интересно, если это похоже.
Однако, чтобы проверить это, я сделал простую программу для проверки этой теории.

string id = "FOO";
MessageBox.Show("@id"); 

Он показывал буквальный @id, так что это привело меня в замешательство. Спасибо за любую помощь! Мне просто нужно понять, что я печатаю, а не просто бездумно следовать примерам.

Ответы [ 3 ]

3 голосов
/ 27 сентября 2010

Символ @ в данном случае используется для параметризации команды SQL, не для подстановки переменных общего назначения в пределах string.

command.CommandText = "INSERT INTO Region (RegionID, RegionDescription) " +
                      "VALUES (@id, @desc)";
command.Parameters.AddWithValue("@id", 42);
command.Parameters.AddWithValue("@desc, "Description of region forty-two.");
3 голосов
/ 27 сентября 2010

@ имеет особое значение в запросе SQL (T-SQL) (то есть: он используется для параметризации запроса), но в строке C # вы просто получаете литерал @.На самом деле, command.CommandText по-прежнему является строкой с символами @;замена происходит только при необходимости (т. е. запрос выполняется).


Если вы хотите интерполяцию в C #, используйте String.Format(), например:

string name = "John";
string greet = String.Format("Hello, {0}", name);

// this also works
Console.WriteLine("Hello, {0}", name);
3 голосов
/ 27 сентября 2010

В этом случае @ определяет переменную, которую вы хотите передать в оператор SQL.

Например:

SqlParameter param  = new SqlParameter();
param.ParameterName = "@id";
param.Value         = 666;

И затем вы добавляете это к своей команде следующим образом:

command.Parameters.Add(param);

Тогда в ваших select @id и @desc будут использоваться значения, переданные как значение SqlParameter.

Поэтому, если вы просто выведите "@id", это будет интерпретировано как обычная строка. Это имеет смысл только при использовании внутри SQL-запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...