Используя эту функцию PHP mysql_escape_string()
, вы можете быстро получить хорошую профилактику.
Например:
SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."'
mysql_escape_string
- Сбрасывает строку для использования в mysql_query
Для большей профилактики вы можете добавить в конце ...
wHERE 1=1 or LIMIT 1
Наконец вы получаете:
SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."' LIMIT 1
Вы хотите добавить его к базе данных, или только к списку результатов, которые будут использовать другие вещи как привязка данных?
, Если это - первый, необходимо будет использовать нормальное, добавляет операция для любого вида LINQ, который Вы используете, но к представлению таблицы, а не IQueryable. Запросы только считывают данные.
, Если это - последний, используйте Счетный. Concat для конкатенации существующей последовательности (IQueryable) с новым, содержащим дополнительные записи (массив сделал бы прекрасный здесь, или список), и, использует результат для привязки и т.д. Вероятно, стоит использовать AsEnumerable () сначала, чтобы удостовериться, что Счетный используется вместо Queryable. Например:
IQueryable<string> names = [...];
names = names.AsEnumerable().Concat(new[] { "(None)", "(Add new)" });
Необходимо сначала преобразовать его для Списка;
IQueryable<int> foo = new SomeQueryable<int<();
List<int> list = foo.ToList();
list.Add(5);
или при помощи РЕДАКТИРОВАНИЯ Concat
IQueryable<int> foo = new SomeQueryable<int<();
foo = foo.Concat(new int[]{5});
: уверенный необходимо повторно присвоить нечто.
Простой ответ - то, что, если Вы не добавляете запись на базовое хранилище данных, которое запрашивает Iqueryable, Вы не можете добавлять новую запись в IQueryable. Таким образом, при использовании LinqToSql затем, необходимо было бы добавить строку в таблицу, которую IQueryable запрашивал для "добавления" строки в IQueryable.
Помнят, что IQueryable не является набором результатов, это - запрос. Пока Вы не будете использовать что-то как.ToList (), IQueryable не оценит набор результатов и что еще более важно, IQueryable не держится за тот набор результатов. Это создает список и помещает результаты в во вместо этого. Таким образом, это означает, что при вызове ToList () на Iqueryable дважды он уйдет и запросит базу данных дважды. Это не заботится, что могло бы быть неэффективно.
Так, при рассмотрении примеров, которые другие использовали выше, простое изменение AsEnumerable () к ToList (), скорее всего, решит проблемы.
Что-то как:
dcDataContext db = new dcDataContext();
var query = from c in db.tblSexes
select new { c.SexCode, c.SexName };
var results = query.ToList().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender" } });
//or even better now that it's a list
var results = query.ToList().Add(new { SexCode = -1, SexName = "Please select your Gender" });
SelectList sliSex = new SelectList(results, "SexCode", "SexName");
Поскольку результатами является IQueryable, необходимо бросить к нему
dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
select new { c.SexCode, c.SexName };
results = results.AsEnumerable().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender"} }).AsQueryable();
SelectList sliSex = new SelectList(results, "SexCode", "SexName");
Или без любого кастинга
результаты = результаты. Объединение (новый [] {новый {SexCode =-1, SexName = "Выберите свой Пол"}})
Явно свойства набора для анонимных типов. Попробуйте Это:
dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
select new { c.SexCode, c.SexName };
results = results.AsEnumerable().Concat(new[] { new { SexCode = -1, SexName = "Please select your Gender"} });
SelectList sliSex = new SelectList(results, "SexCode", "SexName");
Редактирование: необходимо указать на точные типы Вас свойства. Я имею в виду, является ли это интервал, необходимо указать, что это. Я предполагаю, что SexCode является 'длинным', и значением по умолчанию-1 'интервал'. Если Вы бросите-1 к длинному (или тип SexCode), то проблема будет решена.
Вот точное решение, если тип SexCode длинен.
dcDataContext db = new dcDataContext();
var results = from c in db.tblSexes
select new { c.SexCode, c.SexName };
results = results.Concat(new[] { new { SexCode = -1L, SexName = "Please select your Gender"} });
SelectList sliSex = new SelectList(results, "SexCode", "SexName");