#c# #linq
#c# #linq
Вопрос:
В настоящее время я использую существующий код, который имеет
Sql.Append("UPDATE Store SET"
"LogoAlign='" (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" drpLogoAlign.SelectedValue "'")
"', Height='" DB.QuerySafeDisplayHTML(txtHeight.Text.ToString())
"', Width='" DB.QuerySafeDisplayHTML(txtWidth.Text.ToString())
и так продолжается для всех столбцов в таблице, которые он обновляет. Я хотел бы знать, было бы лучше использовать LINQ, проще, выгоднее, и если да, то как мне это сделать?
Спасибо
Комментарии:
1. предупреждение ваш код подвержен атакам с использованием sql-инъекций.
2. что вы используете linq для sql или ef?
3. Сам LINQ не выполняет обновления, только запросы. Здесь вам может помочь одна из библиотек ORM, если вы сначала привяжете соответствующий объект к GUI.
4. Я понимаю, что код уязвим для внедрения sql, будет ли linq предлагать защиту от этого? Я хочу использовать linq для sql
5. @HenkHolterman В то время как LINQ предназначен только для запросов, различные поставщики, включая LINQ to SQL, Entity Framework, LINQ to NHibernate и т. Д., Поддерживают обновления.
Ответ №1:
Для Linq To Entity вы можете просто получить все Store
, чем перебирать их, чтобы изменить значение и использовать объект для SaveChanges
.
Например:
using (TestDBEntities ctx = new TestDBEntities())
{
var allStore = ctx.Stores;
foreach(var store in allStore)
{
store.LogoAlign = (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" drpLogoAlign.SelectedValue "'");
store.Height = txtHeight.Text.ToString();
}
ctx.SaveChanges();
}
Вы можете сделать то же самое с Linq To Sql с помощью DataContext.
using (TestDataContext ctx = new TestDataContext())
{
var allStore = ctx.Stores;
foreach(var store in allStore)
{
store.LogoAlign = (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" drpLogoAlign.SelectedValue "'");
store.Height = txtHeight.Text.ToString();
}
ctx.SubmitChanges();
}
Но, если вы хотите повысить производительность, я думаю, это должно быть в хранимой процедуре, таким образом, вам не нужно будет получать все данные перед обновлением.
Комментарии:
1. Спасибо, я следую вашему совету и просто собираюсь создать хранимую процедуру, я отмечу ваш ответ как тот, который я использовал. Спасибо за вашу помощь