Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
3 / 3 / 0
Регистрация: 07.02.2018
Сообщений: 48
1

Необходимо увеличить время ожидания выполнения sql запроса

23.05.2019, 10:04. Показов 8247. Ответов 4
Метки sql (Все метки)

Как увеличить время? Запрос выполняется 1,5 минуты, asp.net по прошествию 30 секунд отваливается.

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
private void button22_Click(object sender, EventArgs e)
        {
            using (SqlConnection SQLconn1 = new SqlConnection(connString)) //инициализировали новое соединение
            {
                this.dataGridView1.Rows.Clear(); // очистить датугрид
 
                sqlQuery = "тут запрос собственно";
                dataGridView1.ColumnHeadersVisible = true;
                dataGridView1.ReadOnly = false;
                dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                dataGridView1.MultiSelect = false;
                dataGridView1.AllowUserToAddRows = false;
 
                SQLconn1.Open(); //открыли соединение
                SqlCommand command_long = new SqlCommand(sqlQuery, SQLconn1); //инициализировали команду sql
 
                SqlDataReader command = command_long.ExecuteReader(); //поехала выполнятся
 
                if (command.HasRows == false)                         //  если ничего нет
                {
                    MessageBox.Show("По этому запросу ничего не найдено"); //то сообщение выводит
                }
                else
                { 
                    dataGridView1.ColumnCount = command.FieldCount;          //  set number of columns in the grid
                    string[] row;
                    row = new string[command.FieldCount];
 
                    for (int j = 0; j < row.Length; j++)       //////  HEADER
                    {
                        row[j] = command.GetName(j);
                    }
                    dataGridView1.Rows.Add(row);                // add header
                    for (int i = 1; command.Read(); i++)      ///////  ALL ROWS
                    {
 
                        for (int j = 0; j < row.Length; j++)
                        {
                            row[j] = Convert.ToString(command.GetValue(j));
 
                        }
 
                        dataGridView1.Rows.Add(row);
                        dataGridView1.Rows[i].ReadOnly = true;
                    }
                    SQLconn1.Close(); //закрыли соединение
                    dataGridView1.Show();//и хз что это) 
                }
            }
        }
Я поняла, что где-то надо установить увеличение таймера, но где?
Предлагать оптимизировать БД и запрос не стоит - это невозможно.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2019, 10:04
Ответы с готовыми решениями:

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

ODBC SQL Server Driver. Истекло время ожидания запроса
В SQL Server 2008 делаю перегонку данных из одной таблицы в другую по определенному условию....

Время ожидания выполнения истекло. Время ожидания истекло до завершения операции, или сервер не отвечает
Всем доброго времени суток! Имею самописную программку, которая на основании отмеченных...

Timeout на время выполнения SQL запроса
Доброго времени суток! Подскажите пожалуйста, как выставить САБЖ!. Простой пример: m_db =...

4
Эксперт .NET
9314 / 6679 / 1079
Регистрация: 21.01.2016
Сообщений: 25,134
23.05.2019, 10:09 2
Цитата Сообщение от Ma_Russia Посмотреть сообщение
asp.net по прошествию 30 секунд отваливается.
Правильно делает. Решается оптимизацией запроса. Или выполнением его на фоне с периодическим опросом сервера из JS на предмет того, закончилась ли по-конски долгая задача или нет.

Что за запрос такой?

Ma_Russia, кстати, причём тут ASP.NET?
1
3 / 3 / 0
Регистрация: 07.02.2018
Сообщений: 48
23.05.2019, 10:22  [ТС] 3
Usaga , я думала, что проблема в нем.

Или выполнением его на фоне с периодическим опросом сервера из JS на предмет того, закончилась ли по-конски долгая задача или нет. - как такое сделать?

Вот такой конский запрос( Много таблиц присоединяет и много что собирает

Добавлено через 8 минут
Спасибо, проблему смогла решить *решение, если кому-от надо*

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
private void button22_Click(object sender, EventArgs e)
        {
            using (SqlConnection SQLconn1 = new SqlConnection(connString)) //инициализировали новое соединение
            {
                this.dataGridView1.Rows.Clear(); // очистить датугрид
 
                sqlQuery = "конский запрос ";
                dataGridView1.ColumnHeadersVisible = true;
                dataGridView1.ReadOnly = false;
                dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
                dataGridView1.MultiSelect = false;
                dataGridView1.AllowUserToAddRows = false;
 
                SQLconn1.Open(); //открыли соединение
                SqlCommand command_long = new SqlCommand(sqlQuery, SQLconn1); //инициализировали команду sql
 
                command_long.CommandTimeout = 300; // ЭТА СТРОЧКА УВЕЛИЧИВАЕТ ВРЕМЯ ОЖИДАНИЕ ЗАПРОСА
 
                SqlDataReader command = command_long.ExecuteReader(); //поехала выполнятся
 
                if (command.HasRows == false)                         //  если ничего нет
                {
                    MessageBox.Show("По этому запросу ничего не найдено"); //то сообщение выводит
                }
                else
                { //дальше идет магия работы с датагрид, которая мне неподвластна
                    dataGridView1.ColumnCount = command.FieldCount;          //  set number of columns in the grid
                    string[] row;
                    row = new string[command.FieldCount];
 
                    for (int j = 0; j < row.Length; j++)       //////  HEADER
                    {
                        row[j] = command.GetName(j);
                    }
                    dataGridView1.Rows.Add(row);                // add header
                    for (int i = 1; command.Read(); i++)      ///////  ALL ROWS
                    {
 
 
                        for (int j = 0; j < row.Length; j++)
                        {
                            row[j] = Convert.ToString(command.GetValue(j));
 
                        }
 
                        dataGridView1.Rows.Add(row);
                        dataGridView1.Rows[i].ReadOnly = true;
                    }
                    SQLconn1.Close(); //закрыли соединение
                    dataGridView1.Show();//и хз что это) 
                }
            }
        }
0
Эксперт .NET
9314 / 6679 / 1079
Регистрация: 21.01.2016
Сообщений: 25,134
23.05.2019, 11:02 4
Цитата Сообщение от Ma_Russia Посмотреть сообщение
я думала, что проблема в нем.
Судя по всему, у вас Windows Forms, который к ASP.NET никакого отношения не имеет.
0
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
23.05.2019, 11:08 5
Немного костыльное решение. Ты просто увеличила таймаут и на 300 секунд повесила машину. Можно кофе попить. А теперь представь, что на сервер прилетело два таких запроса и 300 секунд ужо мало.

Так что надо дорабатывать:
1. Использовать в работе с БД какой-нить фреймворк, типа EF.
2. Написать класс, который будет работать между твоей кнопкой и БД, где и будет делаться логика выборки, поиска в БД и пр. работа.
3. Сделать все это асинхронными методами, чтобы запрос ушел и жди его как люмимого из армии, а программа работает.
4. Да, и полторы минуты для запроса очень много, тут или оптимизировать запрос, или хранимая процедура (работает быстрее), ну или сервер помощнее нужен.

Добавлено через 16 секунд
Немного костыльное решение. Ты просто увеличила таймаут и на 300 секунд повесила машину. Можно кофе попить. А теперь представь, что на сервер прилетело два таких запроса и 300 секунд ужо мало.

Так что надо дорабатывать:
1. Использовать в работе с БД какой-нить фреймворк, типа EF.
2. Написать класс, который будет работать между твоей кнопкой и БД, где и будет делаться логика выборки, поиска в БД и пр. работа.
3. Сделать все это асинхронными методами, чтобы запрос ушел и жди его как люмимого из армии, а программа работает.
4. Да, и полторы минуты для запроса очень много, тут или оптимизировать запрос, или хранимая процедура (работает быстрее), ну или сервер помощнее нужен.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2019, 11:08

Разное время выполнения SQL запроса
Добрый день. Вопрос чисто на знание и мое непонимание )). У меня в php коде есть sQL запрос....

Обновление формы во время выполнения SQL запроса
Всем добрый день На главной форме в StatusBar хочу при выполнении SQL запроса устанавливать...

Прелоада (смена курсора) во время выполнения тяжелого SQL-запроса
Здравствуйте, есть SQL-запрос, который обрабатывается довольно долго, может 10 секунд и более. В...

Как увеличить время ожидания до завершения операции TableAdapter.Fill()?
При попытке выполнить запрос через TableAdapter превышающий 30 сек выдается ошибка &quot;Истекло время...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.