Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Badoodle
1 / 1 / 1
Регистрация: 06.04.2015
Сообщений: 36
1

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

28.05.2015, 20:20. Просмотров 634. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2015, 20:20
Ответы с готовыми решениями:

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

Время ожидания истекло при первом запуске
Здравствуйте,возникла такая проблема. Создал локальную бд в c#. Когда запускаю .exe, вначале...

Ошибка при вызове метода dataAdapter.Fill(ds)
Код программы взят из учебного пособия слово в слово, изменён только адрес к фалу базы данных...

Ошибка "Попытка чтения или записи в защищенную память" во время выполнения метода DataAdapter.Fill
Делаю так: using (OdbcConnection _conn = new OdbcConnection(_connectionStr) { ConnectionTimeout =...

Подключение к базе northwind. Ошибка при вызове метода Fill
Установил себе Visual web developer 2005 EE. пытаюсь соединится с базой northwind SqlConnection...

2
wm_leviathan
196 / 198 / 69
Регистрация: 12.01.2011
Сообщений: 699
Завершенные тесты: 2
29.05.2015, 14:31 2
Цитата Сообщение от 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
Badoodle
1 / 1 / 1
Регистрация: 06.04.2015
Сообщений: 36
30.05.2015, 09:29  [ТС] 3
Скрин теперь будет только в понедельник, но по памяти помню, что там было слово exception, по русски было написано "Превышено время ожидания".
И еще такой вопрос: когда открывается дебаггер выскакивает сообщение, что этот файл отличается от того который был использован при построении модуля, как то так. Я так понимаю мне нужно перекомпилировать программу? Прошу прощения за глупые вопросы, просто я действительно ни чего не понимаю в C# и в Visual studio никогда не работал
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2015, 09:29

При отправке письма выдает исключение "Время ожидания операции истекло"
При отправке письма выдает исключение &quot;Время ожидания операции истекло&quot; . Через почтовый клиент с...

C# уменьшить время ожидания клиента
Здравствуйте. Сделал интерфейс на C#, который связан с базой на SQL SERVER 2008. Все работает...

Ошибка с fill
Добрый день! Visual studio express 2012 MS Access 2007 В коде ...


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

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

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