Я обычно создаю параметризованные запросы, чтобы избежать атак SQL-инъекций. Тем не менее, у меня есть конкретная ситуация, когда я не смог сделать это полностью:
public DataSet getLiveAccountingDSByParameterAndValue(string parameter, string value)
{
string sql = "select table_ref as Source, method as Method, sip_code as Code, " +
" from view_accountandmissed " +
" where " + parameter + " like @value " +
" order by time DESC ";
MySqlCommand cmd = commonDA.createCommand(sql);
cmd.Parameters.Add("@value", MySqlDbType.String);
cmd.Parameters["@value"].Value = "%" + value + "%";
MySqlDataAdapter objDA = commonDA.createDataAdapter(cmd);
DataSet objDS = new DataSet();
objDA.Fill(objDS);
return objDS;
}
Как видите, я создаю @ value в качестве параметра, но если я попытаюсь сделать то же самое с параметром , запрос завершится неудачей.
Итак, есть ли риск SQL-инъекции с этим запросом? Кроме того, учтите, что параметр устанавливается с помощью SelectedValue DropDownList (не TextBox, поэтому ввод ограничен). Если да, как я могу улучшить этот запрос?