2015-01-09 3 views
0

есть простой способ параметризировать эти запросы, я имел взгляд на довольно много различных сайтах, но не могу найти то, что я хочуМожно ли параметризировать эти запросы SQL C#

 if (HttpContext.Current.Request.HttpMethod == "GET" && TableName != null) 
     { 
      cmd.CommandText = "SELECT TOP 50 * FROM " + TableName; 

      if (SearchID != null && Regex.IsMatch(SearchID, @"^\d+$")) 
      { 
       cmd.CommandText += " WHERE " + TableName + "ID Like '%" + SearchID + "%'"; 
      } 
      else if (SearchName != null) 
      { 
       cmd.CommandText += " WHERE " + TableName + "Name LIKE '%" + SearchName.Replace("'", "''") + "%'"; 
      } 
      if (ID != null) 
      { 
       cmd.CommandText += " WHERE " + TableName + "ID = " + ID + ""; 
      } 
     } 
+1

Является ли 'ID' текстовым или числовым столбцом? –

+1

Вы не можете параметризовать имена таблиц. – dcastro

+0

Нет, не с именами таблиц или столбцов. Только значения –

ответ

1

You может написать любой SQL запрос написанный используется конкатенации строк в SQL параметризованного запроса, и вы должны выбрать последний, так как он является наиболее безопасным способом (вы избежать SQL инъекций):

Изменить это:

cmd.CommandText = "SELECT TOP 50 * FROM " + TableName; 


if (SearchID != null && Regex.IsMatch(SearchID, @"^\d+$")) 
{ 
    cmd.CommandText += " WHERE " + TableName + "ID Like '%" + SearchID + "%'"; 
} 

Для этого:

cmd.CommandText = "SELECT TOP 50 * FROM @TableName"; 
cmd.Parameters.Add("@TableName", TableName); 

if (SearchID != null && Regex.IsMatch(SearchID, @"^\d+$")) 
{ 
    cmd.CommandText += " WHERE ID Like %@SearchID%"; 
    cmd.Parameters.Add("@SearchID",SearchID); 
} 

Вы должны сделать то же самое для остальных if заявлений.

Примечание Однако я должен признаться, что никогда не видел, чтобы передать параметр имени таблицы.

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