Здравствуйте, Курдль, Вы писали:
M>>Говорят, что в .NET соединения (в том числе OleDb и SqlClient) кешируются. M>>В результате, если ты много раз будешь отключаться-переподключаться, физически оно может и не "менять коней на переправе", так на одном соединении и работать физически.
К>В общем-то поэтому мой вопрос и возник. К>ОДНАКО К>Скорее всего мне не хватает знаний, чтобы это реализовать. К>При проверке на СУБД Sybase ASA 8 и Oracle 9 каждое новое подключение из одного приложения вызывает открытие новой сессии. К>Это, естественно, вызывает нарушения в привычной для меня логике программ — особенно в части касающейся транзакций.
M>>Во всяком случае, лично я просто всегда использую using или try/finally — и соединения чистоплотно закрываю. К>Мне тоже приходится так же работать. Однако, это весьма не удобно — надо либо каждой форме, работающей с соединениями, передавать в конструкторе соединение (а для этого перекрывать конструктор), либо писать статические методы для получения соединения в отдельном модуле.
Вобщем-то, жестких ограничений тут нет. Работай, как тебе нравится. Можешь открыть коннект в главной форме и передавать в остальные переменную типа OleDbConnection. Только позаботься о том, чтобы при аварийном завершении программы у тебя не осталось открытого коннекта. А .NET без твоего ведома закрывать коннект не будет, если переменная OleDbConnection будет существовать.
Просто, почему-то, считается правилом хорошего тона открывать и закрывать коннект при каждой серии обращений к базе. У обоих подходов есть свои преимущества и недостатки. Но стандартов, как я уже сказал, нет. Для меня этот момент тоже в первый раз вызвал состояние, близкое к шоку, когда я отошел от чистого PL/SQL и начал писать на других языках.