public override void Open() { if (string.IsNullOrEmpty(_connectionString)) { throw new InvalidOperationException("Connection String is not initialized."); } if (!IsClosed && _state != ConnectionState.Connecting) { throw new InvalidOperationException("Connection already Open."); } try { OnStateChange(_state, ConnectionState.Connecting); var createdNew = default(bool); if (_options.Pooling) { _innerConnection = FbConnectionPoolManager.Instance.Get(_options, out createdNew); } else { _innerConnection = new FbConnectionInternal(_options); createdNew = true; } if (createdNew) { try { _innerConnection.Connect(); } catch (OperationCanceledException ex) { //cancellationToken.ThrowIfCancellationRequested(); throw new TimeoutException("Timeout while connecting.", ex); } catch { if (_options.Pooling) { FbConnectionPoolManager.Instance.Release(_innerConnection, false); } throw; } } _innerConnection.SetOwningConnection(this); if (_options.Enlist) { try { EnlistTransaction(System.Transactions.Transaction.Current); } catch { // if enlistment fails clean up innerConnection _innerConnection.DisposeTransaction(); if (_options.Pooling) { FbConnectionPoolManager.Instance.Release(_innerConnection, true); } else { _innerConnection.Disconnect(); _innerConnection = null; } throw; } } // Bind Warning messages event _innerConnection.Database.WarningMessage = OnWarningMessage; // Update the connection state OnStateChange(_state, ConnectionState.Open); } catch (IscException ex) { OnStateChange(_state, ConnectionState.Closed); throw FbException.Create(ex); } catch { OnStateChange(_state, ConnectionState.Closed); throw; } }