2010-07-29 2 views
0

Я делаю несколько запросов к базе данных за короткий промежуток времени. В прошлом я всегда закрывал соединение и снова открывался, когда мне нужно было снова поговорить с sqlserver - это послужило мне всем хорошо. Но теперь, когда я пытаюсь сделать это за очень короткий промежуток времени, я не получаю сообщений о доступности. Затем я подумал, что просто попытаюсь сохранить связь открытой для жизни приложения, настолько хорошо, что у меня нет проблем. Мне просто интересно, что другие думают об этом согласии ... я на короткой дороге к катастрофе?sql connection pool

Еще одна вещь, которую я использовал, что мне действительно не нужно вызывать метод соединения open(), соединение, похоже, работает без вызова - что с этим связано?

void main() 
{ 
SqlConnection cn = new SqlConnection(); 
cn.ConnectionString = <connection>; 
tmr.interval=100; 
tmr.Elapsed += new System.Timers.ElapsedEventHandler(tmr_Elapsed); 
} 

void tmr_elapsed() 
{ 
tmr.Enabled = false; 
SqlDataAdapter da = new SqlDataAdapter(query, cn); 
da.Fill(dt); 
tmr.Enabled = true; 
} 

C#, SQL-сервер 2000, .NET 2.0

ответ

1

Вы действительно не должны открывать это соединение, а затем повторно использовать его. Конечно, ваш таймер очень быстрый (каждые 100 мс), но в то же время вы сохраняете это соединение открытым довольно долгое время.

Скорее вы должны открыть соединение и утилизировать его надлежащим образом, когда вы закончите в обработчике событий для таймера. Если вы используете инструкцию для своего подключения, вы должны быть в порядке и не беспокоиться об исчерпании ресурсов.

Что касается необходимости открытия соединения, SqlDataAdapter делает это для вас, открывая и закрывая соединение по мере необходимости. Он оставит соединение в состоянии, в котором он находился, когда вы его передали после того, как он выполнит свою работу (он будет держать его открытым, если он был открыт, или открыть, а затем закрыть его, если он был закрыт).

Смежные вопросы