Не как не соображу как это лучше сделать. Сейчас сделано так: есть класс —
public class dbConn
{
private OleDbConnection oConn;
При запуске программы создается экземпляр этого класса (переменная объявлена в главной форме), в конструкторе класса создается коннект к БД и устанавливается значение переменной oConn.
Есть куча форм работающих с базой данных, при их создании я им в конструктор передаю этот самый экземпляр dbConn.
Мне это кажется не очень удачным.
Как это реализовать правильнее. Необходимо, чтобы любая форма имела достум к этому экземпляру класса. Причем экземпляр этого класса всего один.
Подозреваю, что решение каким-то образом связано со static, но как не соображу.
Здравствуйте, DemAS, Вы писали:
AVK>>Лучше этого не делать DAS> Что не делать ? DAS> Как я не делать ? Или вообще ЭТО не делать ? А как тогда ? DAS> Краткость конечно искра таланту, но хотелось бы поподробнее
Сестра.
Не делать один коннект. Коннекты кешируются и скорость их создания и открытия очень высокая (на нее можно забить), а вот проблем от одного коннекта будет море. Это даже не коннект в старом АДО. Тут даже нельзя выполнить двух параллельных запросов.
... << RSDN@Home 1.0 beta 4 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Сестра. VD>Не делать один коннект. Коннекты кешируются и скорость их создания и открытия очень высокая (на нее можно забить), а
вот проблем от одного коннекта будет море. Это даже не коннект в старом АДО. Тут даже нельзя выполнить двух параллельных запросов.
Т.е. есть главная форма, в ней создать строку подключения и во всех подчиненных формах создавать свой коннект используя эту строку соединения?
VD>Не делать один коннект. Коннекты кешируются и скорость их создания и открытия очень высокая (на нее можно забить)
Уверен ?
У меня в одном методе усатнавливается коннект к БД, а во втором с помощью установленного коннекта делается запрос к БД.
Первая процедура работает гораздо дольше второй
Еще. Как кэшируются коннекты ? Для каждого приложения или для ОС в целом ? Т.е. если я создал коннект, закрыл программу, запустил программу и пытаюсь снова установить коннект — он у меня возьмется из кэша или создастся заново ?
Здравствуйте, DemAS, Вы писали:
VD>>Не делать один коннект. Коннекты кешируются и скорость их создания и открытия очень высокая (на нее можно забить)
DAS> Уверен ?
Читайте доки, они рулез
DAS> У меня в одном методе усатнавливается коннект к БД, а во втором с помощью установленного коннекта делается запрос к БД. DAS> Первая процедура работает гораздо дольше второй
Естественно. Первый то раз соединение нужно устанавливать в любом случае.
DAS> Еще. Как кэшируются коннекты ?
Не кешируются, а используется пулинг.
DAS>Для каждого приложения или для ОС в целом ?
Для каждого домена
DAS>Т.е. если я создал коннект, закрыл программу, запустил программу и пытаюсь снова установить коннект — он у меня возьмется из кэша или создастся заново ?
AVK>Для каждого домена
Можно пару вопросов?
А можно узнать на какое время.
Т.е через какой промежуток времени соединение разорвётся?
И в этом случае я понимаю, что между частями программы лучше передавать не конекшн а конекщнстринг?
Здравствуйте, Tom, Вы писали:
Tom>А можно узнать на какое время. Tom>Т.е через какой промежуток времени соединение разорвётся?
А какая тебе разница? Создание объекта коннекции перед каждым запросом избавит тебя от подобных вопросов и, главное, от возможных проблем.
Tom>И в этом случае я понимаю, что между частями программы лучше передавать не конекшн а конекщнстринг?
Точно.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Tom, Вы писали:
Tom>>А можно узнать на какое время. Tom>>Т.е через какой промежуток времени соединение разорвётся? IT>А какая тебе разница? Создание объекта коннекции перед каждым запросом избавит тебя от подобных вопросов и, главное, от возможных проблем.
ХОЧУ ВСЁ ЗНАТЬ Вероятно это где то настраивается.
TK>Что-то около минуты
Надеюсь это шутка
TK>Естественно, что для каждого типа провайдера это будет разное время и настраиваться оно будет по своему.
Да понятно это. А при чём здесь провайдер если пул организует домен ? И вообще где бы почитать первоисточник ? Весь ADO.NET читать пока нет времени. Если есть куда пнуть буду признателен. Если нет, ну и бог с ними с конекщинами.
Уверен. Там пул подключений. По сравнению с запросом к БД обращение к пулу полная фигня.
DAS> У меня в одном методе усатнавливается коннект к БД, а во втором с помощью установленного коннекта делается запрос к БД. DAS> Первая процедура работает гораздо дольше второй
Попробуй сделать подключение прямо в этой процедуре. Увидишь что на второй и далее раз скорость будет такая как будто подключения нет.
DAS> Еще. Как кэшируются коннекты ? Для каждого приложения или для ОС в целом ?
Какие нафиг ОС? Возми Анакрину и глянь сам. Там все приметивно до слез. Но работает вроде приемлемо.
DAS> Т.е. если я создал коннект, закрыл программу, запустил программу и пытаюсь снова установить коннект — он у меня возьмется из кэша или создастся заново ?
создастся заново
... << RSDN@Home 1.0 beta 4 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Tom, Вы писали:
Tom>Да понятно это. А при чём здесь провайдер если пул организует домен ? И вообще где бы почитать первоисточник ? Весь ADO.NET читать пока нет времени. Если есть куда пнуть буду признателен. Если нет, ну и бог с ними с конекщинами.
Пулинг захардкоден в провайдере. Читать исходники адо.нет. Правдо они довольно убогие.
... << RSDN@Home 1.0 beta 4 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Tom, Вы писали:
Tom>>>ХОЧУ ВСЁ ЗНАТЬ Вероятно это где то настраивается. IT>>Что именно настраивается? Tom>Максимальное время простоя соединения в пуле
Для OBDC время жизни в пуле (для каждого драйвера, а не коннекции/DSN) настраивается через Control Panel. OLEDB такого средства не имеет, а пулинг включен по умолчанию на 60 сек (где-то я это встречал, но источника найти не могу).
Про пулинг в .NET есть статьи в MSDN, например про SQL Provider
И еще, если вы используете Connection.Dispose() (ну или пользуетесь using), а не просто Connection.Close(), то Connection убивается и в пуле тоже. Это было в книжке по ADO.NET, и я не помню относится ли это только к SQLConnection или к OLEDBConnection тоже.
Спасибо.
DAS>> Еще. Как кэшируются коннекты ? Для каждого приложения или для ОС в целом ?
VD>Какие нафиг ОС? Возми Анакрину и глянь сам. Там все приметивно до слез. Но работает вроде приемлемо.
Как человек, первую неделю пробующий .Net, я считаю, что мне еще слишком рано брать Анакрину