Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 5

Запрос mssql сервер в потоках

04.05.2014, 15:45. Показов 785. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Сейчас делаю программу, в ней подключение к БД и о обработка информации. Отчет большой, в нем более 30 колонок, строк каждый раз по разному, связь с несколькими таблицами. Загружаю через SqlAdapter в datagridview, на это уходит более 6 секунд, проблема в том, что datagridview после этого нужно еще покрасить, найти определенные строки и столбцы (так как идет выборка, нельзя стандартно написать, что закрашивать, предположим 5, 7 столбец) и покрасить в определенные цвета (это нужно руководству).

После загрузки прохожу отдельно по строкам и столбцам, проверяю regex-ом и закрашиваю, все вместе времени уходит более 15 секунд. По моему, для отчета это очень много. Хочу разбить эти действия по потокам. Но ничего толкового в инете не нахожу. Так как одно действие завязано на другом. Вопрос, ни кто не сталкивался с подобной ситуацией, можно ли загружать из БД как то построчно, и параллельно в том что загрузилось искать что нужно и закрашивать
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2014, 15:45
Ответы с готовыми решениями:

Сервер на потоках
Всем доброго уважаемые) У меня есть сервер который получает пакет от клиента и отправляет тот же пакет обратно. Кусок кода работает...

Как в Delphi сделать запрос на запрос, база mssql, BDE
Добрый день! Кто-нибудь может подсказать, как можно Tquery и использовать как таблицу, при написании другого запроса? Заранее спасибо!

Qt клиент и сервер в одном консольном приложении в разных потоках
Доброго времени суток, уважаемые форумчане! Пытаюсь написать консольное приложение, которое реализует обмен информацией по сети между...

3
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
04.05.2014, 16:50
Если выборку формирует СУБД, то многопоточность приложению не поможет.
А сколько строк в DataGridView? 15 секунд на закраску даже для 30 колонок слишком долго.
0
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 5
04.05.2014, 18:25  [ТС]
nmcf, спасибо за оперативный ответ. Кое как сделала. Вряд ли это оптимальное решение, но сейчас отчет заполняется быстрее, секунд за 6 (что, в принципе, сойдет)))), а покраска (что и тормозило), я запускаю двумя делегатами: вот, кому интересно решение:


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
    public delegate void AsyncMethodChangeColor();
    public delegate void AsyncMethodCnahgeColorForColumn(string Neseccary);
    delegate void UpdateGridHandler(System.Data.DataTable table);
    delegate void UpdateGridThreadHandler(System.Data.DataTable table);
 
    SqlConnection cn;
    SqlDataAdapter adapter;
 
 
    //СОЕДИНЯЕТСЯ, ВЫПОЛНЯЕТСЯ ЗАПРОС
    private System.Data.DataTable Connect(string Command)
    {
        System.Data.DataTable d = new System.Data.DataTable();
        cn = new SqlConnection();
 
        string connection = ConfigurationManager.ConnectionStrings["MedicineReports.Properties.Settings.mssql"].ConnectionString; //СОЕДИНЕНИЕ ЧЕРЕЗ КОНФИГУРАТОР
 
        cn.ConnectionString = connection;
 
        SqlCommand command = cn.CreateCommand();
        //   command.CommandText = "select StatesNumber, StateName from States where StatesNumber='01' union select C_Number, CostName from Costs where  StatesNumber='01' ";
 
        command.CommandText = Command;
        //"select *from AllReport";
        //AllReport();
        adapter = new SqlDataAdapter(command);
 
 
 
 
        adapter.Fill(d);
 
 
        return d;
    }
 
 
    //функция, записывает в список индексы строк, которые нужно покрасить по маске
    private void ChangeColor()
    {
        // Regex rgx = new Regex(@"^[0-9][0-9].$|^[0-9][0-9]$");
 
 
        Regex rgx = new Regex(@"^[0-9]$|^[0-9][0-9]$|^[0-9].$|^[0-9][0-9].$");
 
        for (int i = 0; i < dataGridView1.RowCount - 1; i++)
        {
 
            if (rgx.IsMatch(dataGridView1[0, i].Value.ToString()))
            {
                //for (int j = 0; j < dataGridView1.ColumnCount; j++)
                //{
 
                //если номер 1.1., то 
              //  RowsIndex.Add(i);
 
                //то меняем цвет
                DataGridViewRow theRow = dataGridView1.Rows[i];
                theRow.DefaultCellStyle.BackColor = Color.Lavender;
                //dataGridView1[j, i].Style.BackColor = Color.Cyan;
                theRow.DefaultCellStyle.Font = new System.Drawing.Font("Arial", 11);
                //dataGridView1[j, i].Style.Font = 
 
                //}
            }
 
 
 
        }
    }
 
    private void CnahgeColorForColumn(string Neseccary)
    {
        for (int j = 0; j < dataGridView1.ColumnCount; j++)
        {
 
            string ColumnName = dataGridView1.Columns[j].HeaderText;
 
            string[] split = ColumnName.Split(new Char[] { ' ' });
 
            if (split[0] == Neseccary)
            {
                DataGridViewColumn theColumn = dataGridView1.Columns[j];
                theColumn.DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 153);
                theColumn.DefaultCellStyle.Font = new System.Drawing.Font("Arial", 11);
            }
 
 
        }
 
    }
 
 
 
    private void click()
    {
        //запрос у меня ОГРОМНЫЙ, поэтому пишу пример
        string Request = "select * from example";
 
        DataTable table1 = Connect(Request);
 
        UpdateGridHandler ug = UpdateGrid;
        ug.BeginInvoke(table1, cb, null);
    }
 
    private void cb(IAsyncResult res)
    {
 
    }
 
 
    private void UpdateGrid11(System.Data.DataTable table)
    {
        dataGridView1.DataSource = table;
 
        AsyncMethodChangeColor caller1 = new AsyncMethodChangeColor(ChangeColor);
        // Initiate the asychronous call.
        IAsyncResult result1 = caller1.BeginInvoke(null, null);
 
 
        AsyncMethodCnahgeColorForColumn caller3 = new AsyncMethodCnahgeColorForColumn(CnahgeColorForColumn);
 
        // Initiate the asychronous call.
        IAsyncResult result3 = caller3.BeginInvoke("СУММА", null, null);
 
 
    }
 
 
    private void UpdateGrid(System.Data.DataTable table)
    {
        if (dataGridView1.InvokeRequired)
        {
            UpdateGridThreadHandler handler = UpdateGrid11;
            dataGridView1.BeginInvoke(handler, table);
 
        }
        else
        {
            dataGridView1.DataSource = table;
 
        }
    }
в чем фишка: вначале грузиться запрос, отображается в datagridview, и сразу начинает краситься, минус - пара строк и столбцов красятся по ходу дела, но это в любом случае лучше, чем ждать 15 секунд
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
05.05.2014, 06:56
Добрый день.
Я не совсем уверенно знаю чистый ADO.NET и WinForms, но могу дать вам несколько советов.

Старайтесь использовать DataReader, вместо DataAdapter. Он намного быстрее. Быть может для конкретной задачи, целесообразней использовать именно DataAdapter, но вам всё-таки стоит попробовать с DataReader. Как вариант, можно попробовать сразу красить нужные ячейки при формировании строк.

Для повышения скорости работы с БД (выборки), всегда, в первую очередь оптимизируйте запрос, посмотрите стоят ли нужные индексы в таблицах. Это место, где можно выиграть большое количество времени. Если вы работаете с MSSQL, посмотрите план построения запроса, будет прекрасно видно, где он проседает, и что нужно для этого сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.05.2014, 06:56
Помогаю со студенческими работами здесь

MsSQL сервер и Delphi
Привет! Как на дельфи использовать МСсервер? через что? помогите..!

Конвертация из dbf на MSSQL-сервер
Подскажите как возможно отключить таблицу формата dbf от общей фоксовой базы, так как связь между таблицами фоксы не даёт ковертировать...

GET-запрос к MSSQL
доброе утро ! не могу понять, как заставить работать запрос. есть файл, который посылает гет-запрос к мсскл базе. если выполнить его в...

Запрос к MSSQL
Здравствуйте! Подскажите пожалуйста, как в VBNET организовать запрос из MSSQL. Раньше я работал в Access и там для любого элемента...

запрос mssql
как в sql servere написать запрос поиска таблицы, зная название столбца этой таблицы. При этом баз много, то есть я не могу зайти именно в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru