Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 13 14 15 [16] 17   вперед  Ctrl
 Re: Исключения vs коды возвратов  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26531
ВМоисеев
Попытка решения в лоб - ищется группа извещений, время которых меньше заданного, а группе ищутся с максимальным временем - оказалась не состоятельной. Задача перешла из режима отчетного документа в интерактивный режим. А здесь присутствует фактор времени. Десятки минут не катят.
Пока ничего лучшего не придумал, кроме как строить в дополнительной таблицы временные срезы и извещения выбирать не из всего множества, а из диапазона между срезом и заданной датой.

Я буду крайне благодарен за любую положительную идею и конструктивную критику. Задача уже немного надоела, но надо сделать.

А в чём проблема-то? Хранимка медленно отрабатывает?
Показывайте структуру таблиц и толком объясните задачу.
19 июл 18, 09:10    [21583444]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1979
>skyANA, сегодня, 09:01 [21583428]
>Иначе задам вопрос: разве может случиться так, что lst_Entity будет null в момент вызова метода Add?
Да. У меня хранимые процедуры, реализующие INSERT, UPDATE, DELETE возвращают выборку из одной строки - список не нужен.
Пример:
    private async void fun_Ins() { 
      гп.bl_Разрешение = false;
      
      xrow = null;  lst_Entity = null;
      //-- Готовим параметр запроса
      asp = new OracleParameter[4] {
        new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
        new OracleParameter("xnom_inspek", yrow.str_НомИнспек),
        new OracleParameter("xdt_inspek", yrow.dt_Инспек),
        new OracleParameter("xfk_AON", yrow.fk_АОН)
      };
      //-- Запись в таблицу
      при.tmrStart(); await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Trassi_Ins", wsp.sp_Ins, asp, RowToEntity)); при.tmrStop();
      if (wsp.wspErr != null) MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK);

      if (xrow != null) {
        xrow.chb_Entity = true;
        oc_Entity.Add(xrow);
        iRow = oc_Entity.IndexOf(xrow);
        dgv_Entity.ScrollIntoView(xrow);
        dgv_Entity.SelectedIndex = iRow;
      }
     . . .

lst_Entity может принимать значение null, ссылки на пустой список, ссылки на заполненный список.
19 июл 18, 10:04    [21583740]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1979
>skyANA, сегодня, 09:10 [21583444]
>А в чём проблема-то? Хранимка медленно отрабатывает?
Да.
Если интересно, то см. здесь, здесь и здесь.
Структуру всех таблиц для построения нужной мне выборки по извещениям я не знаю. Контора сопровождает инфосистему, сделанную другими. Код ХР подсмотрели у тех, кто до нас.
19 июл 18, 10:18    [21583838]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26531
ВМоисеев
>skyANA, сегодня, 09:01 [21583428]
>Иначе задам вопрос: разве может случиться так, что lst_Entity будет null в момент вызова метода Add?
Да. У меня хранимые процедуры, реализующие INSERT, UPDATE, DELETE возвращают выборку из одной строки - список не нужен.
Пример:
    private async void fun_Ins() { 
      гп.bl_Разрешение = false;
      
      xrow = null;  lst_Entity = null;
      //-- Готовим параметр запроса
      asp = new OracleParameter[4] {
        new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
        new OracleParameter("xnom_inspek", yrow.str_НомИнспек),
        new OracleParameter("xdt_inspek", yrow.dt_Инспек),
        new OracleParameter("xfk_AON", yrow.fk_АОН)
      };
      //-- Запись в таблицу
      при.tmrStart(); await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Trassi_Ins", wsp.sp_Ins, asp, RowToEntity)); при.tmrStop();
      if (wsp.wspErr != null) MessageBox.Show(wsp.wspErr, caption_Entity, MessageBoxButton.OK);

      if (xrow != null) {
        xrow.chb_Entity = true;
        oc_Entity.Add(xrow);
        iRow = oc_Entity.IndexOf(xrow);
        dgv_Entity.ScrollIntoView(xrow);
        dgv_Entity.SelectedIndex = iRow;
      }
     . . .


lst_Entity может принимать значение null, ссылки на пустой список, ссылки на заполненный список.

Мда, как же всё у Вас прибито гвоздями...
19 июл 18, 10:41    [21584048]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26531
ВМоисеев
>skyANA, сегодня, 09:10 [21583444]
>А в чём проблема-то? Хранимка медленно отрабатывает?
Да.
Если интересно, то см. здесь, здесь и здесь.
Структуру всех таблиц для построения нужной мне выборки по извещениям я не знаю. Контора сопровождает инфосистему, сделанную другими. Код ХР подсмотрели у тех, кто до нас.

Если Вы за два года ни структуры, ни плана, ни индексов не узнали, то боюсь Вам не помочь.
19 июл 18, 10:49    [21584113]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26531
ВМоисеев,

всё сидите на Oracle 8i? изменения в БД идут исключительно через хранимки?
свои объекты в БД создавать есть возможность? изменять хранимые процедуры?

если да, то смотрите в сторону денормализации... летать будет всё со страшной силой
19 июл 18, 11:04    [21584200]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1979
>skyANA, сегодня,
>10:41 [21584048]
>Мда, как же всё у Вас прибито гвоздями…
Интересно, видим одно и тоже - выводы делаем диаметрально противоположные. Я стремился создать одну гибкую конструкцию обработки выборки из ХП, Вы же на каждый чих создаёте класс, что чуждо для меня.
Например, как формирую извещения для крайнего изменения состояния объектов:
       . . . 
       else { //-- Крайний срез существует
          //-- Загружаем параметры крайнего среза 
          lst_Entity = null; lst_Entity = new List<row_Entity>();
          asp = new OracleParameter[2] {
            new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
            new OracleParameter("x_datesre", dt_srez_old)
          };
          await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Srez_Sel", wsp.sp_Sel, asp, RowToEntitySre));
          if (wsp.wspErr != null) goto mp1;

          //-- Загружаем макс. по времени извещения после крайнего среза в уже имеющийся список сущностей
          asp = new OracleParameter[3] {
            new OracleParameter("cur_viborka", OracleDbType.Cursor, ParameterDirection.Output),
            new OracleParameter("x_dt_srez_new", dt_srez_new),
            new OracleParameter("x_dt_srez_old", dt_srez_old)
          };
          await Task.Run(() => wsp.Entity_SP("NCUYAO_GIS.Srez_Dop", wsp.sp_Sel, asp, RowToEntityIzv2));
          if (wsp.wspErr != null) goto mp1;
        }
      }
      //-- Покажем выборку
      if (lst_Entity != null) {
        //-- Сортируем список
        lst_Entity = lst_Entity.OrderBy(x => x.mesto).ThenByDescending(x => x.rn).ThenBy(x => x.pk).ToList();
        oc_Entity = new ObservableCollection<row_Entity>(lst_Entity);
        lst_Entity = null;
        dgv_Entity.ItemsSource = oc_Entity;
       . . . 
    private void RowToEntitySre(IDataRecord record) {
      xrow = new row_Entity() {. . . };
      lst_Entity?.Add(xrow);
    }
    private void RowToEntityIzv2(IDataRecord record) {
      xrow = new row_Entity() { . . . };
      //-- Сушность xrow.рк есть в списке?
      int i = lst_Entity.FindIndex((x => x.pk == xrow.pk));
      if (i == -1)  lst_Entity.Add(xrow);  //--Нет
      else if(xrow.dateizm > lst_Entity[i].dateizm) { lst_Entity.RemoveAt(i); lst_Entity.Add(xrow); }   //--Есть
    }
    . . .
19 июл 18, 11:40    [21584447]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
ViPRos
Member

Откуда:
Сообщений: 9560
skyANA,

этот rowEntity нафиг никому не нужен вовсе
19 июл 18, 12:08    [21584591]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
hVostt
Member

Откуда:
Сообщений: 15624
ВМоисеев
Вы же на каждый чих создаёте класс, что чуждо для меня


Что-то вас не парит использования классов, созданных «на каждый чих», из библиотек .NET.
Вы просто не хотите ничему учиться, уже скоро год пройдёт, как вы копируете одни и те же
тексты с плохим кодом, и все советы и рекомендации прошли мимо. Просто тратите чужое время.
Зачем?
19 июл 18, 12:09    [21584595]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
hVostt
уже скоро год пройдёт, как вы копируете одни и те же
тексты с плохим кодом, и все советы и рекомендации прошли мимо. Просто тратите чужое время.
Зачем?

не спрашивай. Бесполезно.
Я не понимаю зачем эту тему опять подняли.
19 июл 18, 12:29    [21584699]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26531
ВМоисеев,

и в чём же гибкость?

У Вас интерфейс гвоздями прибит к базе Oracle и логика с ними перемешана.
Понадобится что-то качественно изменить и фигушки. Скажете, что это не предполагалось и надо всё переписывать.
Тупо вызвать хранимку без параметров и возвращающую NUMBER вместо курсора Ваша конструкция уже не позволяет.

А гибкость - это быстрая и лёгкая реакция на новые требования.
19 июл 18, 12:35    [21584720]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26531
ViPRos
skyANA,

этот rowEntity нафиг никому не нужен вовсе
Да там весь проект на фиг никому не нужен.
Было бы иначе, то давно бы всплыли очевидные косяки архитектуры.
19 июл 18, 12:38    [21584728]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
ВМоисеев
Member

Откуда: Редкино
Сообщений: 1979
>skyANA, сегодня, 12:35 [21584720]
>...У Вас интерфейс гвоздями прибит к базе Oracle и логика с ними перемешана…
Вы не правы:
namespace ns_Хранилище {
  public partial class uc_Пользователи : UserControl, I_Плитка {
    Guid pk_Guid;
    ObservableCollection<row_Entity> oc_Entity=new ObservableCollection<row_Entity>();  //-- Показываем в DataGrid 
    List<row_Entity> lst_Entity; //-- Временное хранение выборки
    row_Entity xrow, yrow;
    SqlDataReader reader;
    SqlParameter[] asp;
  . . .
  public class row_Entity {. . .};
  . . . 
  public uc_Пользователи(MainWindow omw, Object oUC) {
    InitializeComponent();
  . . .
    lst_Entity = null;  lst_Entity = new List<row_Entity>();
    //-- Готовим параметры запроса
    asp = new SqlParameter[3];
    asp[0] = new SqlParameter("@pk_Entity", pk_Guid);

    string xstr = tbx_Псевдоним.Text.Trim();
    if (xstr != "") xstr += "%";
    asp[1] = new SqlParameter("@str_Псевдоним", xstr) ;

    xstr = tbx_ФИО.Text.Trim();
    if (xstr != "") xstr += "%";
    asp[2] = new SqlParameter("@str_ФИО", xstr);

    при.tmrStart(); try { await wsp.Entity_SP("au_Пользователи_Sel", wsp.sp_Sel, asp, RowToEntity); }
    catch (System.InvalidOperationException ex) {. . . 
    catch (Exception ex) {. . .
    . . .
19 июл 18, 15:17    [21585395]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26531
ВМоисеев,

и что Вы показали? Это то же приложение, но работающее вдруг с SQL Server? Нет.
19 июл 18, 15:26    [21585429]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 26531
ВМоисеев,

уберите
using Devart.Data.Oracle;

уберите
using System.Data.SqlClient;

будет интерфейс работать? нет... прибит гвоздями

а гибкость - это кода уровню представления не важно то, из какого хранилища прилетают данные
19 июл 18, 15:29    [21585446]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
hVostt
Member

Откуда:
Сообщений: 15624
skyANA
а гибкость - это кода уровню представления не важно то, из какого хранилища прилетают данные


Суть ещё только в том, чтобы иметь возможность заменить источник данных.
Архитектура, которая это позволяет, может решать и другой спектр задач,
кеширование, профилирование, вешать аспекты, аудит и многое другое.

Естественно, судя по приведённым кускам кода, об этом даже нельзя и мечтать.
19 июл 18, 15:45    [21585516]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13633
hVostt
skyANA
а гибкость - это кода уровню представления не важно то, из какого хранилища прилетают данные


Суть ещё только в том, чтобы иметь возможность заменить источник данных.
В двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.
hVostt
Архитектура, которая это позволяет, может решать и другой спектр задач,
кеширование, профилирование, вешать аспекты, аудит и многое другое.

Естественно, судя по приведённым кускам кода, об этом даже нельзя и мечтать.
В двухзвенке это решается средствами СУБД - profiler, triggers и т. п.

Мне тоже не нравятся показанные примеры кода. Но они решают поставленную задачу, никакие требования не нарушены, значит претензий быть не может.
20 июл 18, 05:28    [21586945]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13633
skyANA
если да, то смотрите в сторону денормализации... летать будет всё со страшной силой
Но и проблем с обеспечением целостности данных добавится...
20 июл 18, 05:33    [21586946]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5019
Алексей К
В двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.

С чего бы это? Делается отдельный класс для взаимодействия с бд, суть которого - исключительно чтение/запись данных, и никакой прикладной логики внутри. Из класса экстрактится интерфейс, класс по этому интерфейсу инжектится в классы, реализующие прикладную логику. При необходимости смены БД пишется новый класс для новой БД с тем же интерфейсом, инжектится вместо старого. Всё это прекрасно работает на двухзвенке. Ну, разумеется, если программа написана так, что данные из БД сразу пихаются в гуй, и в нем же и обрабатываются, то тогда да, уже мало что поможет.
20 июл 18, 06:23    [21586952]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13633
Сон Веры Павловны
Алексей К
В двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.

С чего бы это? Делается отдельный класс для взаимодействия с бд, суть которого - исключительно чтение/запись данных, и никакой прикладной логики внутри. Из класса экстрактится интерфейс, класс по этому интерфейсу инжектится в классы, реализующие прикладную логику. При необходимости смены БД пишется новый класс для новой БД с тем же интерфейсом, инжектится вместо старого. Всё это прекрасно работает на двухзвенке. Ну, разумеется, если программа написана так, что данные из БД сразу пихаются в гуй, и в нем же и обрабатываются, то тогда да, уже мало что поможет.
Да, обращение к БД в коде клиента лучше вынести в репозитарий, кто ж спорит. Но прикладную логику разумно располагать на сервере. В двухзвенке для этого используются средства СУБД - stored proc, view и т. п. А в этом случае хоть как ты организуй код на клиенте, серверную часть при смене СУБД придётся переделывать.
20 июл 18, 06:32    [21586958]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5019
Алексей К
В двухзвенке для этого используются средства СУБД - stored proc, view и т. п. А в этом случае хоть как ты организуй код на клиенте, серверную часть при смене СУБД придётся переделывать.

А такое и в трехзвенке бывает, когда критичные к быстродействию куски прикладной логики выносятся в БД.
20 июл 18, 06:56    [21586968]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13633
Сон Веры Павловны
Алексей К
В двухзвенке для этого используются средства СУБД - stored proc, view и т. п. А в этом случае хоть как ты организуй код на клиенте, серверную часть при смене СУБД придётся переделывать.

А такое и в трехзвенке бывает, когда критичные к быстродействию куски прикладной логики выносятся в БД.
Да, но сейчас речь не об этом.
20 июл 18, 09:44    [21587332]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
hVostt
Member

Откуда:
Сообщений: 15624
Алексей К
В двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.


Двухзвенка это прошлый век.

Алексей К
В двухзвенке это решается средствами СУБД - profiler, triggers и т. п.


Т.е. костыли и приплясывания с бубном. Да и пофигу, прошлый век и совершенно не интересно.

Алексей К
Мне тоже не нравятся показанные примеры кода. Но они решают поставленную задачу, никакие требования не нарушены, значит претензий быть не может.


Ещё неизвестно решают ли. Или так хочет думать автор.
Некоторые лечатся уринотерапией и искренне верят, что помогает.
Тогда вроде как можно сказать тоже самое, что сказал ты.
20 июл 18, 10:43    [21587625]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13633
hVostt
Алексей К
В двухзвенке смена БД обычно приводит к переписыванию всей прикладной логики. Поэтому о смене БД речи не идёт.


Двухзвенка это прошлый век.
И что? Предлагаешь все существующие проекты переписать на трёхзвенку?
20 июл 18, 10:58    [21587745]     Ответить | Цитировать Сообщить модератору
 Re: Исключения vs коды возвратов  [new]
Алексей К
Member

Откуда: Новосибирск
Сообщений: 13633
hVostt
Ещё неизвестно решают ли. Или так хочет думать автор.
Некоторые лечатся уринотерапией и искренне верят, что помогает.
Тогда вроде как можно сказать тоже самое, что сказал ты.
Тебе нужны копии актов сдачи проекта в промышленную эксплуатацию?
20 июл 18, 11:05    [21587778]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 13 14 15 [16] 17   вперед  Ctrl
Все форумы / WinForms, .Net Framework Ответить