Соединение удаляется из пула, если срок жизни соединения истек либо обнаружено, что нарушена связь соединения с сервером. Последнее обнаруживается только при неудачной попытке обращения к серверу.
2.1.11. Управление пулом соединений с помощью ключевых слов строки соединения
Ниже в таблице приводятся параметры управления пулом .NET-провайдера SQL Server. Эти параметры можно задать в строке соединения (свойство Connec-tionString объекта SQLConnection ).
Параметр |
Значение по умолчанию |
Описание |
Max Pool Size |
Максимальное число соединений в пуле |
|
Min Pool Size |
Минимальное число соединений в пуле |
|
Pooling |
'true' |
Поддержка пулинга соединений: когда установлено true, соединение, возвращается в соответствующий пул или, при необходимости, создается и добавляется в соответствующий пул |
2.1.12. Транзакции
Транзакция переводит базу данных из одного согласованного состояние в другое согласованное состояние. В силу этого транзакция выполняется по принципу "или все, или ничего" - либо принимается результат выполнения всех вложенных в контекст транзакции действий над источником, либо ни одного из них.
Когда были успешны все действия в контексте транзакции, она подтверждается и источник данных переходит в новое согласованное состояние.
В противном случае, если хотя бы одно из действий, заданных в контексте транзакции, оканчивается аварийно, то транзакция откатывается. Результаты выполнения всех ранее выполненных в контексте транзакции действий отменяются. Источник данных остается в исходном состоянии.
Метод BeginTransaction объектов SqlConnection, OleDbConnection создает объект транзакции (соответственно типа SqlTransaction или OleDbTransaction):
public SqlTransaction BeginTransaction();
public SqlTransaction BeginTransaction( string transactionName ); public SqlTransaction BeginTransaction( IsolationLevel iso ); public SqlTransaction BeginTransaction( IsolationLevel iso, string transactionName );
public OleDbTransaction BeginTransaction();
public OleDbTransaction BeginTransaction( IsolationLevel iso ); Параметры:
transactionName - имя транзакции;
iso - уровень изоляции транзакции 1.
Транзакция подтверждается методом Commit объекта транзакции
public void Commit();
и откатывается методом Rollback объекта транзакции:
public void Rollback();
Нужно отметить, что транзакция должна выполняться и завершаться при открытом соединении. Чтобы соединение не закрылось до окончания транзакции, можно назначить неограниченное время действия соединения, установив параметр Connection Lifetime в строке соединения в значение 0, например:
data source=PAVLIK;initial catalog=bal;persist security info=False; user id=ICH;workstation id= PAVLIK;packet size=4 096;Connection Lifetime=0
Пример получения, использования и завершения транзакции. В таблице SHETA базы данных PAVLIK на 100 рублей увеличивается сумма для клиента с кодом 77 7 и одновременно на столько же уменьшается сумма у клиента с кодом 999. Если одно из изменений завершится аварийно, нужно отменить и остальное.
//---соединение с базой данных
SqlConnection cn = new SqlConnection(