Вот код типичной функции конструктора-сгенерированной таблицы адаптера:
Согласно MSDN, DbDataAdapter.Fill
ведут себя так:
Метод Fill получает строки из источника данных с использованием оператор SELECT, указанный соответствующим свойством SelectCommand. Объект соединения, связанный с оператором SELECT, должен быть действительным, но его не нужно открывать. Если соединение закрыто до вызова Fill, оно открывается для извлечения данных, а затем закрывается. Если соединение открыто до вызова Fill, оно остается открытым.
Ref: Fill Method (DataTable)
Однако в дизайнерским сгенерированных Вставка/удаление/обновление, код будет выглядеть следующим образом:
global::System.Data.ConnectionState previousConnectionState = this.Adapter.InsertCommand.Connection.State;
if (((this.Adapter.InsertCommand.Connection.State & global::System.Data.ConnectionState.Open)
!= global::System.Data.ConnectionState.Open)) {
this.Adapter.InsertCommand.Connection.Open();
}
try {
int returnValue = this.Adapter.InsertCommand.ExecuteNonQuery();
return returnValue;
}
finally {
if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
this.Adapter.InsertCommand.Connection.Close();
}
}
Будет ли он повторно использовать соединение через пул соединений, если в течение определенного периода времени? –
Это ортогонально тому, как диспетчер соединений управляет пулом соединений. Поскольку он использует одну и ту же строку соединения (если вы не делаете что-то другое) каждый раз, они будут взяты из одного пула. Простой факт, что это адаптер таблицы, не изменяет способ обработки пулов. Если вам интересно, в MSDN есть статья, посвященная объединению, но она не специфична для адаптеров таблицы (и не обязательно): http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx – tvanfosson
Спасибо за ссылку. –