2016-08-03 3 views
0

У нас есть связанная с данными Data Grid, которая показывает, какая часть продукта используется.LINQ to SQL с дополнительными ненулевыми столбцами

Как следует из названия, у него есть дополнительная колонка, чтобы указать сумму, чтобы настроить это количество.

The LINQ к SQL, который определяет источник привязки является

public BindingList<MeterRead> QryMeterRead 
{ 
    get 
    { 
     var list = new BindingList<MeterRead>(); 
     list.AllowNew = false; 
     list.AllowRemove = false; 
     var records = ExecuteQuery<MeterRead>(
      @"select 
       mr.meter_rd_id, 
       mr.meter_id, 
       mr.read_dt, 
       mr.prev_dt, 
       mr.reading, 
       mr.demand_reading, 
       mr.usage, 
       mr.orig_usage, 
       mr.prev_usage, 
       mr.estimated, 
       mr.kvar_reading, 
       mr.change_out_from_id, 
       mr.multi_mtr_est, 
       adjust_dt = convert(datetime, null), 
       usage_adjust = convert(integer, null), 
       measure_id = convert(integer, null), 
       mr.location_id, 
       'customer_id' = {0}, 
       'group_id' = {1} 
      from ub_meter_read mr (nolock) 
      where mr.meter_id = {2} 
      order by meter_rd_id desc", usageparams.read_customer_id, usageparams.read_group_id, usageparams.read_meter_id); 
     if (records != null) 
     { 
      foreach (MeterRead rec in records) 
      { 
       list.Add(rec); 
      } 
     } 
     return list; 
    } 
} 

где adjust_dt, usage_adjust и measure_id добавляются поля. Они не существуют в таблице, но они позволяют корректировать данные.

В информационной сетке нашей формы могут быть внесены изменения в данные для фиксации при нажатии кнопки «Сохранить».

Внесите некоторые изменения в форму, например, измените числовое значение usage_adjust, а базовый источник данных LINQ подберет эти изменения.

Все в порядке.

Если кто-то (например, ребята из отдела тестирования) решает удалить эти изменения, удалив значения usage_adjust, кажется, что LINQ пытается связать их - бросая вводящие в заблуждение пустые опорные ошибки для Data Grid.

Я угадываю, что другие сталкивались с этим, но я не знаю, как его назвать или как искать этот тип ошибки.

Кто-нибудь знает, какой способ решить этот вопрос?

+0

Где запрос LINQ? –

ответ

0

В настоящее время установка значения usage_adjust по умолчанию 0 остановила ошибки.

const string sqlfrmt = 
    @"select 
     mr.meter_rd_id, 
     mr.meter_id, 
     mr.read_dt, 
     mr.prev_dt, 
     mr.reading, 
     mr.demand_reading, 
     mr.usage, 
     mr.orig_usage, 
     mr.prev_usage, 
     mr.estimated, 
     mr.kvar_reading, 
     mr.change_out_from_id, 
     mr.multi_mtr_est, 
     adjust_dt = convert(datetime, null), 
     usage_adjust = convert(integer, 0), 
     measure_id = convert(integer, null), 
     mr.location_id, 
     'customer_id' = {0}, 
     'group_id' = {1} 
    from ub_meter_read mr (nolock) 
    where mr.meter_id = {2} 
    order by meter_rd_id desc"; 

Теперь, вместо сетки данных является пустым, то есть в нем 0, и я предоставил код в процедуре обновления для пропуска полей с 0 корректировками.

partial void UpdateMeterRead(MeterRead instance) 
{ 
    try 
    { 
     if (instance.usage_adjust != 0) 
     { 
      sp_ub_adjust_usage(instance.location_id, instance.meter_id, instance.group_id, instance.adjust_dt, instance.usage_adjust, 
       instance.meter_rd_id, instance.measure_id, instance.customer_id, BaseContext.CurrentSpid); 
     } 
    } 
    catch (Exception err) 
    { 
     Console.WriteLine(err); 
    } 
} 

Если кто-нибудь придумает объяснение, которое исправляет эту проблему в ближайшие месяц или два, я приму их ответ.

Путь для меня, чтобы отредактировать файл позже:

Drive:\ICIS_7V04T52\in\Main\in\o\in.o.ub\am\Readings\ua\DataDB\uaDB.cs 
+0

Вы не используете ни LINQ, ни параметризованные запросы. Ваш код просто генерирует строку SQL из данных, тем самым подвергая вас атакам SQL-инъекций, проблемам с форматированием (как вы выяснили) и т. Д. Подсказка «NOLOCK» также означает, что у вас есть проблемы с блокировкой, которые вы (ошибочно) предполагаете, что они будут решены читая грязные данные. –

+0

Фактический запрос LINQ будет выглядеть как 'list = myDbContext.MeterReads.Where (x => x.meter_id = someValue) .OrderBy (x => x.meter_rd_id). Выберите (...). ToList()' или эквивалентно в форме запроса 'от x в myDbContext.MeterReads где x.meter_id = someValue ...' –

+0

Я не писал это, @PanagiotisKanavos. Я не большой поклонник привязки данных. Этот код является частью класса LINQ to SQL в VS. Поскольку набор данных содержит столбцы, которые не существуют в таблице данных, он создается вручную в коде. Опять же, я этого не писал. Параметры не вытягиваются из полей формы. Если есть лучший способ рассказать о том, что я делаю, пожалуйста, уточните. – jp2code

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