Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 0
Регистрация: 29.10.2012
Сообщений: 67
1

Код выполняется не последовательно

11.06.2015, 17:33. Просмотров 895. Ответов 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
        private void button7_Click(object sender, EventArgs e)
        {
            StartSQL(button7.Text);
            SqlDataReader reader;
            SqlCommand cmd = GetCmd();
            cmd.CommandText = "UPDATE Addr_house SET codes='123';";
            try
            {
                cmd.Connection.Open();
                reader = cmd.ExecuteReader();
                MessageBox.Show("Запрос выполнен успешно!");
                EndSQL(button7.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                cmd.Connection.Close();
                this.Cursor = Cursors.Default;
            }
        }
 
        private void StartSQL(string ButtonText)
        {
            Status1.Text = "Выполняется запрос \"" + ButtonText + "\"";
            Status1.ForeColor = Color.Red;
            this.Cursor = Cursors.WaitCursor;
        }
 
        private void EndSQL(string ButtonText)
        {
            this.Cursor = Cursors.Default;
            Status1.Text = "Выполнен запрос \"" + ButtonText + "\"";
            Status1.ForeColor = Color.Black;
        }
Сразу после нажатия на кнопку курсор меняется, НО Label Status1 становится красным только после того, как выполнится запрос (Запрос выполняется секунд 15) и видно
C#
1
MessageBox.Show("Запрос выполнен успешно!");
Нажимаю "Ок" MessageBox и Label Status1 опять становится черным. Почему код не выполняется последовательно?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2015, 17:33
Ответы с готовыми решениями:

Код не выполняется в одном месте, но выполняется в другом
Вот код процедуры: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)...

Найти наименьший номер элемента последовательно-сти, для которого выполняется условие
Дано начальное значение a"нулевое"=1, r = 1.8 и рекуррентная формула...

Переделать код, чтобы POST-запросы отправлялись последовательно в 1 поток
Есть пример многопоточной отправки пост запросов через проски Чарлеса, нужно переделать чтобы...

Нужно последовательно ввести список целых чисел, код не работает. В чем ошибка?
n=int(input()) a= #заполнение списка через последовательное введение чисел

6
Эксперт .NET
13479 / 10445 / 2746
Регистрация: 17.09.2011
Сообщений: 17,752
11.06.2015, 17:46 2
Цитата Сообщение от ruslan_fi Посмотреть сообщение
Почему код не выполняется последовательно?
Потому что вся работа с интерфейсом выполняется в одном потоке, который заблокирован запросом в базу.
0
3 / 3 / 0
Регистрация: 29.10.2012
Сообщений: 67
11.06.2015, 17:58  [ТС] 3
Как мне малой кровью исправить ситуацию?
Потоки ещё не умею юзать...
0
Эксперт .NET
13479 / 10445 / 2746
Регистрация: 17.09.2011
Сообщений: 17,752
11.06.2015, 18:08 4
ruslan_fi, под какую версию фреймворка пишете?
0
3 / 3 / 0
Регистрация: 29.10.2012
Сообщений: 67
11.06.2015, 18:18  [ТС] 5
Visual Studia 2012
Видимо, 4.5 o_O
0
Эксперт .NET
13479 / 10445 / 2746
Регистрация: 17.09.2011
Сообщений: 17,752
11.06.2015, 19:50 6
Лучший ответ Сообщение было отмечено ruslan_fi как решение

Решение

Цитата Сообщение от ruslan_fi Посмотреть сообщение
Видимо, 4.5
Ну, раз видимо, то вот малокровный фикс:
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
        private async void button7_Click(object sender, EventArgs e)
        {
            var button = sender as Button;
            button.Enabled = false;
 
            StartSQL(button7.Text);
            SqlDataReader reader;
            SqlCommand cmd = GetCmd();
            cmd.CommandText = "UPDATE Addr_house SET codes='123';";
            try
            {
                reader = await Task.Factory.StartNew(() =>
                {
                    cmd.Connection.Open();
                    return cmd.ExecuteReader();
                };
                MessageBox.Show("Запрос выполнен успешно!");
                EndSQL(button7.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                cmd.Connection.Close();
                this.Cursor = Cursors.Default;
                button.Enabled = true;
            }
        }
using System.Threading.Tasks;

Не по теме:

Зачем тему перенесли в ADO.NET, если основной вопрос не о базах?

1
3 / 3 / 0
Регистрация: 29.10.2012
Сообщений: 67
15.06.2015, 08:24  [ТС] 7
Спасибо! Работает.
Не обратил внимание в начале на private async void
+ у Вас там скобка одна пропала после return cmd.ExecuteReader();});
Пишу, чтобы у других те же вопросы не возникали.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2015, 08:24

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

Не выполняется код
Подскажите в чем ошибка.. Отправляю с одной страницы <a href="goto_olymp.php?cmath=1">go</a>...

Не выполняется код на Си
Первое число вводится,а цикл не выполняется и программа прекращает свою работу. Не знаю, что...

Не выполняется код
<HTML> <HEAD> <meta charset='utf-8'> <link rel='stylesheet' type='text/css' href='style.css'>...

Код не выполняется
Всем привет. Решил порешать всякие студенческие простенькие задачки в консоли (аля запрограммируйте...


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

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

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