2013-12-05 2 views
2

Этот код написан на C#, и он вызывает базу данных для получения данных из него. Но я не понимаю, что такое «WHERE b.CompRec =?» среднееЧто означает «WHERE x =?» mean в SQL

public string GetFileNameAndTitle(int compRec) 
    { 
     string fileNameAndTitle = ""; 
     string sql = "SELECT a.FileName, a.Title FROM (Files a INNER JOIN Components b ON a.RecNo=b.FileRec) WHERE b.CompRec = ?"; 
     using (OleDbCommand cmd = new OleDbCommand(sql, cn)) 
     {    
      cmd.Parameters.AddWithValue("@CompRec", compRec); 
      OpenConnection(); } 
+2

Впоследствии '?' Заменяется фактическим значением. –

+0

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.prepare(v=vs.110).aspx – Wusiji

ответ

2

Это в основном местозаполнитель, куда вы поместите данные позже. Это позволяет разделить ваш оператор SQL с данными, используемыми в запросе. Это синтаксис параметризованных операторов.

10

Это параметризованное утверждение.

cmd.Parameters.AddWithValue("@CompRec", compRec); 

Эта строка устанавливает фактическое значение, когда запрос выполняется на сервере. Это предотвращает SQL Injection и является 100% правильным подходом!

+0

Право 100% может состоять в создании SP и просто вызове SP вместо этого использует динамический SQL (который помогает движку) и вводит параметры, чтобы сообщить БД, что он получает. – jean

+1

@jean, что довольно спорно. План выполнения заявления будет получен в кэше в первый раз, а последующие вызовы будут использовать один и тот же план, поскольку он параметризуется. –

+2

@jean 'AddWithValue' выводит тип. Это только в том случае, если это допущение неверно или, может быть, более точно, что вам будет полезно явно набирать их через SP или что-то еще. –

Смежные вопросы