Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Почему всегда возвращается Open? / 5 сообщений из 5, страница 1 из 1
15.09.2012, 11:45
    #37958750
Ъыжсло
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему всегда возвращается Open?
Истоки....
Программа при старте создает подключение к БД типа OledbConnection. Естесственно обрабатываются все исключения и прочее. Теперь делаем следующее: программа работает а мы вырубаем SQLServer например через службы (просто говорим ему стоп). Далее...
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Function GetReis() As Generic.List(Of Reis)
        Dim retVal As New Generic.List(Of Reis)
        If _myApp.ConnectionServiceLocal.Connection IsNot Nothing AndAlso _myApp.ConnectionServiceLocal.Connection.State = ConnectionState.Open Then
            Dim ta As New Global.FC.dsReisTableAdapters.reisTableAdapter
            ta.Connection = _myApp.ConnectionServiceLocal.Connection
            Dim dt As New Global.FC.dsReis.reisDataTable
            ta.Fill(dt)
            For Each row As Global.FC.dsReis.reisRow In dt.Rows
                Dim desc As String = vbNullString
                Try
                    desc = IIf(IsDBNull(row("desc")), Nothing, row.desc)
                Catch ex As Exception
                    Debug.Print(ex.Message)
                End Try
                Dim itm As New Reis(row.id, row.crdt, row.naimen, desc, row.aviakom_id, row.marshrut_id, row.pv)
                retVal.Add(itm)
            Next
        End If
        Return retVal
    End Function



Процедура выполняется однако на ta.Fill(dt) получаем эксепшн.. Отсюда вопрос: как же проверять подключение? Как быть уверенным что оно (подключение) активно и запрос будет выполнен?
...
Рейтинг: 0 / 0
15.09.2012, 12:04
    #37958763
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему всегда возвращается Open?
Ъыжсло, открывай соединение перед выполнением запроса, выполняй его и немедленно закрывай соединение. И почему ты используешь OleDbConnection вместо SqlConnection?
...
Рейтинг: 0 / 0
15.09.2012, 12:11
    #37958767
Ъыжсло
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему всегда возвращается Open?
авторИ почему ты используешь OleDbConnection вместо SqlConnection Тут все просто: программа работает не только с MSSQL но и с другими СУБД. автороткрывай соединение перед выполнением запроса, выполняй его и немедленно закрывай соединение Согласен. Но увы и ах... Переписать за выходные пару сотен тысяч строк кода... А потом выловить все возможные глюки...
...
Рейтинг: 0 / 0
15.09.2012, 14:29
    #37958828
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему всегда возвращается Open?
авторКак быть уверенным что оно (подключение) активно и запрос будет выполнен?
Ъыжсло, таких гарантий вам и Путин не даст...
Учитывая все вами сказанное - попробуйте просто переписать проперть ConnectionServiceLocal.Connection , где и проверять соединение... и если оно живо (можно попытаться выполнить элементарный селект select 1 ну плюс ваши проверки) - возвращать его, а если нет - переоткрывать...
И вообще забавно... Вы хотите каких-то гарантий, но тогда зачем все эти проверки на nothing и state??? Похоже вам начхать... так-как эта ситуация не обрабатывается... Что-то мне подсказывакт, что можно выкинуть парусотен тысяч... и глюков станет меньше... И Вам повезло, что приложение трудится в один поток...
...
Рейтинг: 0 / 0
16.09.2012, 12:03
    #37959148
Ъыжсло
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему всегда возвращается Open?
я кстати именно так и поступил. Вы невероятно догадливы... но к сожалению оно не трудится в один поток. Переписал класс Connection + сервисная функция которая в отдельном потоке проверяет соединение и если оно умерло пингует сервант. Методом выдергивания сетевого кабеля было проверено: программа пишет в базу если все ТРУ. иначе пишет в кэш (XML файл) и при появлении соединения - в базу. Возможно не слишком элегантно. Будем дорабатывать. Хотелось бы просто совет.
авторВы хотите каких-то гарантий, но тогда зачем все эти проверки на nothing и state???
Чтоб не вылетело с ошибкой чо...
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Почему всегда возвращается Open? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]