Как правильно организовать подключение к БД?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Как правильно организовать подключение к БД?

Сообщение sergey-911 » 25.07.2007 (Ср) 18:18

Доброго времени суток уважаемые.
Прошу прощения за нелепый вопрос.
Как правильно организовать подключение к БД?
1) Установить подключение к БД, выполнить нужное действие с данными и уничтожить подключение. И так, каждый раз...
Код: Выделить всё

Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open "Строка подключения"
...
...
Set conn = Nothing

2) Один раз установить подключение, а дальше работать с ним, не отключая его?
Код: Выделить всё

Public conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open "Строка подключения"
С уважением, Сергей.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 25.07.2007 (Ср) 18:27

И снова, ответ "смотря что ты делаешь".
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 25.07.2007 (Ср) 22:26

Работа клиент-серверного приложения с MS SQL сервером по локальной сети. Я всегда применял способ 1, описанный выше. Но, сейчас задумался...
С одной стороны, приложение не качает лишний трафик, т.к. подключение происходит по мере необходимости, с последующим отключением. Не занимаются лишние лицензии на сервере. Сервер не выполняет постоянно авторизацию заново...
Из минусов, в случае короткого сбоя сети (если я правильно понимаю), вылезет ошибка, даже если пользователь ничего с данными не производит в этот момент. Т.е., если юзер по каким-либо соображениям хочет отключить сеть, а прога "безобидно висит в трее", то всё...
Вот и хочу посоветоваться... :oops:
С уважением, Сергей.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 25.07.2007 (Ср) 22:32

Ничего с соединением не будет в случае короткого сбоя сети.
Небось не дураки MSSQL писали.
Изображение

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 26.07.2007 (Чт) 0:10

tyomitch писал(а):Ничего с соединением не будет в случае короткого сбоя сети.
Небось не дураки MSSQL писали.

Не спорю, MS SQL писали грамотные люди. :D
В случае короткого сбоя сети - проверю завтра на работе, т.к. дома нет доступного MS SQL сервера. В случае короткого сбоя сервера проверил уже сегодня. Стоит остановить сервер, то после выполнения любого действия с данным подключением вылезает сообщение об ошибке -2147467259
Код: Выделить всё

[Microsoft][ODBC SQL Server Driver]Ошибка связи

до тех пор, пока не установим новое подключение
Код: Выделить всё

Set conn = Nothing
Set conn = New ADODB.Connection   
conn.Open "строка подключения"

, даже если сервер уже запущен. Уверен, в случае короткого сбоя сети произойдет аналогичное событие, т.к. при способе подключения 2, клиент постоянно поддерживает подключение с сервером.
А отловить и исправить данную ошибку весьма непросто... :roll:
С уважением, Сергей.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.07.2007 (Чт) 0:27

Так ведь эта ошибка возникает не "даже если пользователь ничего с данными не производит в этот момент", а как раз наоборот -- если в момент сбоя пытаться к ним обратиться.
Тут уж ты никак не перехитришь, чтобы поверх сломанной сети смочь успешно обратиться к сломанному серверу :-)

Я имел в виду другое: что если соединение на короткое время обрывается и потом само собой возобновляется (что возможно при проблемах в сети, но не при остановке сервера), то при последующих обращениях к серверу ошибки не будет.

TCP поддерживает сохранение (простаивающего) соединения при обрыве связи. Только если с одного конца в него начать что-то писать, тогда он отреагирует на обрыв.
Изображение

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 26.07.2007 (Чт) 2:22

Спасибо tyomitch. На счет обрыва сети - проверю завтра. Но, неуверен, что будет разница. Ведь на время остановки сервера, к данным обращения не было...
И всё же, как поступить в моём случае? Какой вариант применить? Может и правильно, что если связи с сервером нет, то досвидос? Следовательно нужно перезапустить приложение... Лично я не уверен...
С уважением, Сергей.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.07.2007 (Чт) 7:31

Напиши функцию Reconnect(Connection As ADODB.Connection).
В обработчике ошибок один раз вызывай ее, второй раз показывай ошибку.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 26.07.2007 (Чт) 7:48

sergey-911 писал(а):Может и правильно, что если связи с сервером нет, то досвидос? Следовательно нужно перезапустить приложение... Лично я не уверен...


В принципе так и есть - попробуй сетевой кабель выдернуть...

Для нормальной локалки такие ситуации не столь страшны ибо редки. Ну вывалится приложение раз в несколько месяцев из-за сетевой ошибки, когда кабель из компа выдернули - нестрашно. Можно даже не заморачиваться с обработкой.

Ну а для сеткок с неустойчивым соединением лучше использовать 1-вый вариант, с обработкой ошибок соединения...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 26.07.2007 (Чт) 17:04

В принципе так и есть - попробуй сетевой кабель выдернуть...
Сегодня попробовал. Приложение тут же проглючило. :shock:
Ну а для сеткок с неустойчивым соединением лучше использовать 1-вый вариант, с обработкой ошибок соединения...
У нас на предприятии сетка волшебная, как и админы! :D В домене порядка 3000 кампутеров. Где оптика, где витая пара, а где коаксиал... Где работает нормально, а где одни глюки. Естественно, моими прогами пользуется лишь часть малая частьподразделения на предприятии... :D
Я решил применить 2 способ подключения (подключать и не разрывать соединение) к серверу. Уже начал менять часть кода. А на случай ошибки поступлю так, как рекомендует alibek.
С уважением, Сергей.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot], Yandex-бот и гости: 28

    TopList