| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Отваливается прога |
| Автор: Ripperr 19.12.2009, 03:29 | ||||||||
Отваливается прога без ответа и привета... в журнале ощибок оставляет метку
ругается я так понял на функцию line_analystic прога компилится под Visual Studio 2010 и NET 4.0 прога отваливается произвольно пробовал гонять данные имитируще процесс работы вроде все стабильно но в реальной ситуаци отлитает в течении дня .... Ругать не строго с шарпом и студей токо начал разбератся прогу эту написал изучая язык а точнее с первого по 7 днень общения основной период времени пытался приручить прогу к мускулу и разобратся чего оно отваливается по пункту 2 безуспешно... вот собственно функция
вызывается с двух мест (первый при обработке логов)
а так-же чтении данных с ком порта в раельных условиях работает имменнов этом режим при надобности выложу сурсы и пример даных прикреплен.
помоги кто чем может ибо только начал разбератся а тут такой кирпич перед носом .... пытался раскидать по тредам (неселен в этом) но нечего это не дало (немного прибавило скорости). Попутный вопрос как сделать так чтобы треды виртуально были автономными ибо иногда при вополнении скюэль запросов появляются какието неверные данные поэтому пришлось поставить дожидатся завершения выполнения потока. правилам крсивого кодо-писания некто не учил поэтому написал в меру своих познаний если кто наставит на путь истеный буду благодарен. |
| Автор: ДобренькийПапаша 19.12.2009, 08:46 | ||
| Возможно там где вы читаете из odbcDR, например 28-я строка в первом коде. надо написать:
Мне кажется, что когда вы обращаетесь к odbcDR[1] вы и получаете ошибку. |
| Автор: Ripperr 19.12.2009, 15:08 |
| Запрос возврашает 1 строку с 2мя перемеными мне кажется тут цикл не надо... я цикл пользовал когда строк приходит n но я попробую ваш вариант как сделать так чтобы переменные было видно на протяжении всей функции ... потомучто если я добавляю цикл while переменные полученные в нем недоступны коду идущему под ним |
| Автор: ДобренькийПапаша 19.12.2009, 16:59 |
| После того как сделали odbcDR.Read(), сделайте odbcDr.Close(); Вообще возьмите за привычку закрывать потоки. Или оборачивайте в using, когда объект создаёте. |
| Автор: Ripperr 19.12.2009, 17:20 |
| Поподробнее обо оборачивать в using я ж написал "7 день" общения с шарпой |
| Автор: wester 19.12.2009, 17:53 |
| Ripperr, msdn есть.... http://msdn.microsoft.com/ru-ru/library/yh598w02.aspx |
| Автор: Ripperr 19.12.2009, 18:08 |
| а что он дает ? using |
| Автор: ДобренькийПапаша 19.12.2009, 18:23 |
| Ты попробовал закрыть поток и обращаться в цикле? Если не помогло, тогда не знаю. Нужен твой солюшен, но у тебя база там, поэтому не знаю как мне самому отдебажить... |
| Автор: Ripperr 19.12.2009, 19:01 |
| в цикле не пробовал но там непонятки с перемеными если перемены врашаются в цикле то к ним пото в не цикла нельзя обрашатся и как обойти "Cross-thread operation not valid: Control 'richTextBox1' accessed from a thread other than the thread it was created on." |
| Автор: Ripperr 19.12.2009, 19:50 |
| я вот одного понять не могу я создал виртулально комп порт закидываю туда данные порядка 5000 строк программа не вылетела а там внезапно закрывается .... правда у меня win7 ... а там XP |
| Автор: Ripperr 22.12.2009, 18:39 | ||
После моих манипуляций с закрытием потока появилась вот така ощибка (через день работы проги)
|
| Автор: Ripperr 22.12.2009, 19:27 |
| Это как обясни плз поподробнее ... |
| Автор: ДобренькийПапаша 22.12.2009, 19:46 |
| Можно проверить что возвращает ваш запрос например так (если я пользуюсь SQL Server 2005): Вывести через MessageBox.Show() (непосредственно перед вызовом хранимки) все параметры передаваемые в хранимую процедуру на сервере. После этого беру пишу тот же запрос, что и в хранимке, подставляя вместо параметров значения выведенные в MessageBox. После этого глядим что сервер вернул. Собственно после этого, обычно, становится очевидно, в чём проблема... Может это можно как то и быстрее сделать... Я лично делаю так и доволен. p.s. А то, что не возвращет reader элемент под номером 1 означает скорее всего то, что его просто нет... То есть запрос работает некорректно. Скорее всего сам запрос то не заваливается нигде, просто он составлен некорректно для решения вашей задачи. |
| Автор: Ripperr 22.12.2009, 20:01 |
| у меня mySQL у меня в качестве БД ... поводу проверки а можно както сделать если запрос возврашает пустоту то просто прерывать выполнение функция |
| Автор: Ripperr 22.12.2009, 20:57 |
| фокус в том что прога может работать по 10 часов ... и не отваливаться а может внезапно закрыться в самом начале прога стабильно работает на 2х моих машинах на win7 и win2008 что на одной что на второй у меня не получилось завалить приложение ..... пробовал всю ночь грузить поток на комп порт (виртуально так как устройства самомго нету у меня он стоит только на серверной машыне) но поток идентичен тому что грузит устройство так как я пишу лог при получении строк этот лог я гружу в ком ... так вот за 2 ночи по не отвалилось ... на хр сп3 я видел что прога отлетала в самом начале как только открывалась а бывает работает по 2 дня ... непонятно почему такой разнабой ... просто было бы неплоха чтобы она писала последний стак перемных когда она отвалисась чтобы хоть чтото понять можно было.... |
| Автор: ДобренькийПапаша 22.12.2009, 22:14 |
| Как вариант можете отдельно логировать значения переменных передаваемых в хранимку, от которых, гипотетически, всё и рушится при обращении к ридеру. Проверить возвращает ли что-то SqlDataReader можно с помощью свойства SqlDataReader.HasRows, которое возвращает true, если объект содержит одну или несколько строк и false, если не содержит. |