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

Ошибка при SQLAdapter.Fill: превышено время ожидания

28.05.2015, 20:20. Показов 2198. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! У нас на предприятии есть программа которая собирает инфу с датчиков и сует в базу, есть в ней функция, которая берет данные из таблицы, считает среднее значение и пихает в другую таблицу (я в С# не шарю, прочитал комментарии в коде), эта функция глючит, иногда выскакивает ошибка и отправляет в дебаггер. человека, который ее писал, попросить исправить нет возможности, поэтому прошу помощи тут.
Я ниже приведу код функции, место ошибки 32 строка SqlAdapter.Fill(ValuesPerHourDB_First); и если вас не затруднит, расскажите что в нем происходит и почему появляется ошибка, и куда смотреть в дебаггере, что бы увидеть, что именно ее вызывает:
Кликните здесь для просмотра всего текста
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
144
145
146
147
148
149
150
 public void UpdateValuesInHour_v2(Int32 HoursToSubtract)
        {
            SQL_SARK.Усредненные_значения_за_часDataTable ValuesPerHourDB = new SQL_SARK.Усредненные_значения_за_часDataTable();
            SarkWinPRG.DATA.SQL_SARKTableAdapters.Усредненные_значения_за_часTableAdapter ValuesPerHourAdapter = new SarkWinPRG.DATA.SQL_SARKTableAdapters.Усредненные_значения_за_часTableAdapter();
 
            SQL_SARK.Усредненные_значения_за_часDataTable ValuesPerHourDB_First = new SQL_SARK.Усредненные_значения_за_часDataTable();
 
            float AverageValue = 0; // Вычисляемое среднее значение
            float SummIntervals = 0; // Длительность интервала вычисления 
            TimeSpan Interval; // Длительность интервала выборки значения
            float SummValuesMultiplyIntervals = 0;
 
            DateTime StartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 0, 0);
            StartDate = StartDate.AddHours(-HoursToSubtract - 26); // 26, чтобы учесть датчики АСКРО
 
            DateTime EndDate;
 
            String connectionString = SarkWinPRG.Properties.Settings.Default.SARKConnectionString;
            SqlDataAdapter SqlAdapter = new SqlDataAdapter();
            SqlConnection SqlConn = new SqlConnection(connectionString);
            DataTable SelectFromMonthDT = new DataTable();
 
            string ExecuteString = "SELECT [Шифр Блд], [Дата/Время], Значение, Минимально, Максимально " +
                                    "FROM dbo.[Усредненные значения за час] " +
                                    "WHERE ([Дата/Время] >= CONVERT(DATETIME, '" +
                                                StartDate.Year + "-" +
                                                StartDate.Month + "-" +
                                                StartDate.Day + " " + StartDate.Hour + ":00:00', 102)) " +
                                    "ORDER BY [Шифр Блд], [Дата/Время]";
 
            SqlAdapter.SelectCommand = new SqlCommand(SqlConn, ExecuteString);
            SqlAdapter.Fill(ValuesPerHourDB_First);
 
            DataRow newrow;
 
            int Hours = HoursToSubtract;
            for (int devID = 0; devID < ХарактеристикиБД_DT.Rows.Count; devID++) // проходим для полученной даты по всем датчикам
            #region Проход по всем датчикам
            {
                if ((Boolean)ХарактеристикиБД_DT[devID][ХарактеристикиБД_DT.Датчик_АСКРОColumn.ColumnName])
                    Hours = HoursToSubtract + 26;
                else
                    Hours = HoursToSubtract;
 
                StartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 0, 0);
 
                for (int Hour = 0; Hour < Hours; Hour++) // проверка существования усреднения за 3 часа до текущей даты
                {
                    StartDate = StartDate.AddHours(-1); // вычитаем 0, 1, 2, 3 часов соответственно из текущей даты
                    EndDate = StartDate.AddHours(1);
 
                    DataRow[] dr = ValuesPerHourDB_First.Select("([Шифр БлД] = " + ХарактеристикиБД_DT[devID][ХарактеристикиБД_DT.Шифр_БлДColumn.ColumnName] + ") "+
                        "AND ([Дата/Время] >= '" + StartDate.ToString() + "') AND ([Дата/Время] < '" + EndDate.ToString() + "')");
 
                    if (dr.Length == 0) // если не писали в БД ещё такую запись
                    {
                        #region Вычисляем строку для таблицы "Измеренные значения за год"
                        ExecuteString = "SELECT TOP (100) PERCENT [Шифр БлД], [Дата/Время], Значение " +
                                        "FROM dbo.[Измеренные значения за месяц] " +
                                        "WHERE ([Шифр БлД] = " + ХарактеристикиБД_DT[devID][ХарактеристикиБД_DT.Шифр_БлДColumn.ColumnName] + " ) " +
                                               "AND ([Дата/Время] >= CONVERT(DATETIME, '" +
                                                    StartDate.Year + "-" +
                                                    StartDate.Month + "-" +
                                                    StartDate.Day + " " + StartDate.Hour + ":00:00', 102)) " +
                                               "AND ([Дата/Время] <= CONVERT(DATETIME, '" +
                                                    EndDate.Year + "-" +
                                                    EndDate.Month + "-" +
                                                    EndDate.Day + " " + EndDate.Hour + ":00:00', 102)) " +
                                        "ORDER BY [Шифр БлД],[Дата/Время]";
 
                        SqlAdapter.SelectCommand = new SqlCommand(ExecuteString, SqlConn);
                        SelectFromMonthDT.Reset();
                        SqlAdapter.Fill(SelectFromMonthDT);
 
                        if (SelectFromMonthDT.Rows.Count > 0)
                        #region Если в "Измеренные значения за месяц" за эту дату что-то есть
                        {
                            if (SelectFromMonthDT.Rows.Count > 1)
                            {
                                for (int j = 0; j < SelectFromMonthDT.Rows.Count - 1; j++)
                                {
                                    Interval = (DateTime)SelectFromMonthDT.Rows[j + 1]["Дата/Время"] - (DateTime)SelectFromMonthDT.Rows[j]["Дата/Время"];
                                    SummValuesMultiplyIntervals += ((Single)SelectFromMonthDT.Rows[j]["Значение"]) * Convert.ToSingle(Interval.TotalSeconds);
                                    SummIntervals += Convert.ToSingle(Interval.TotalSeconds);
                                }
 
                                AverageValue = SummValuesMultiplyIntervals / SummIntervals;
                            }
                            else
                                AverageValue = (Single)SelectFromMonthDT.Rows[0]["Значение"];
 
                            #region Добавление новой строки в таблицу "Измеренные значени за год"
                            newrow = ValuesPerHourDB.NewRow();
 
                            newrow[ValuesPerHourDB.Шифр_БлдColumn.ColumnName] = ХарактеристикиБД_DT[devID][ХарактеристикиБД_DT.Шифр_БлДColumn.ColumnName];
                            newrow[ValuesPerHourDB._Дата_ВремяColumn.ColumnName] = StartDate;
                            newrow[ValuesPerHourDB.ЗначениеColumn.ColumnName] = AverageValue;
 
                            if (SelectFromMonthDT.Rows.Count == 1)
                            {
                                newrow[ValuesPerHourDB.МаксимальноColumn.ColumnName] = SelectFromMonthDT.Rows[0]["Значение"];
                                newrow[ValuesPerHourDB.МинимальноColumn.ColumnName] = SelectFromMonthDT.Rows[0]["Значение"];
                            }
                            else
                            {
                                #region Поиск max и min
                                Single max = (Single)SelectFromMonthDT.Rows[0]["Значение"];
                                Single min = (Single)SelectFromMonthDT.Rows[0]["Значение"];
 
                                for (int i = 0; i < SelectFromMonthDT.Rows.Count; i++)
                                {
                                    if (max < (Single)SelectFromMonthDT.Rows[i]["Значение"])
                                        max = (Single)SelectFromMonthDT.Rows[i]["Значение"];
 
                                    if (min > (Single)SelectFromMonthDT.Rows[i]["Значение"])
                                        min = (Single)SelectFromMonthDT.Rows[i]["Значение"];
                                }
                                #endregion
 
                                newrow[ValuesPerHourDB.МаксимальноColumn.ColumnName] = max;
                                newrow[ValuesPerHourDB.МинимальноColumn.ColumnName] = min;
                            }
 
                            ValuesPerHourDB.Rows.Add(newrow);
                            #endregion
                        }
                        #endregion
                        #endregion
                    }
                    else
                    {
                    }
                }
            }
            #endregion
 
            #region Обновление таблицы "Измеренные значения за год" в БД
            try
            {
                int rowscount = ValuesPerHourAdapter.Update(ValuesPerHourDB);
                ValuesPerHourDB.Dispose();
            }
            catch (Exception ex)
            {
                SysLOGW("Ошибка при сохранении данных в \"Усредненные значения за час\": " + ex.Message);
            }
            #endregion
 
            SysLOGW("Завершение \"усреднения за час\"");
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2015, 20:20
Ответы с готовыми решениями:

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

Ошибка HTTP при обращении к серверу. Превышено время ожидания
Здравствуйте! Помогите, пожалуйста разобраться, что можно сделать, чтобы исправить ошибку - При добавлении конфигурации в мобильное...

Ошибка: превышено время ожидания (модули)
Юнит: unit program1; interface type matrix = array of real; var a:matrix; procedure MCount(var a:matrix); implementation ...

2
 Аватар для wm_leviathan
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
29.05.2015, 14:31
Цитата Сообщение от Badoodle Посмотреть сообщение
иногда выскакивает ошибка и отправляет в дебаггер
1)скрин нужен с дебаггера, я так понимаю там явно exception.
2) ошибка однозначно тут
CONVERT(DATETIME, '" +
StartDate.Year + "-" +
StartDate.Month + "-" +
StartDate.Day + " " + StartDate.Hour + ":00:00', 102)
3) пожалуйста проверьте одинаково ли будет работать если StartDate.Hour будет = 9 и StartDate.Hour будет равен 10 при EndDate.Hour = 12? т.е. с 9 утра до 12 дня и с 10 утра до 12 дня.
4) посмотрите в базе до значения столбца [Дата/Время] как они выглядят ? интересуют значения меньше 10 утра.
1
1 / 1 / 1
Регистрация: 06.04.2015
Сообщений: 36
30.05.2015, 09:29  [ТС]
Скрин теперь будет только в понедельник, но по памяти помню, что там было слово exception, по русски было написано "Превышено время ожидания".
И еще такой вопрос: когда открывается дебаггер выскакивает сообщение, что этот файл отличается от того который был использован при построении модуля, как то так. Я так понимаю мне нужно перекомпилировать программу? Прошу прощения за глупые вопросы, просто я действительно ни чего не понимаю в C# и в Visual studio никогда не работал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2015, 09:29
Помогаю со студенческими работами здесь

Превышено время ожидания ответа при входе на сайт
Не удается получить доступ к сайту Превышено время ожидания ответа от сайта www.genymotion.com. Попробуйте сделать следующее: ...

Загрузка файла из интернета и ошибка "превышено время ожидания" для файлов с плохой отдачей
Здравствуйте, вот такая проблема образовалась: загружаю файлы через WebClient, в большинстве случаев всё хорошо, но у некоторых файлов...

Не отправляется письмо: превышено время ожидания
Есть следующий код: namespace testMail { class Program { static void Main(string args) { ...

Не могу подключиться к серверу по FTP ошибка Превышено время ожидания соединения, Ошибка:Невозможно подключиться к серверу
Всем доброго настроения! ПЫтался подключиться через две программы с разных компов (точнее компа было два). Суть: Хостер предоставил мне...

Ошибка "Время ожидания операции истекло" при использовании SmtpClient
Не могу отправить письмо! При нажатии на кнопку прога виснет и через некоторое время пишет ошибку: &quot;Время ожидания операции...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru