internal OleDbConnectionInternal(OleDbConnectionString constr, OleDbConnection connection) : base() { #if DEBUG try { // use this to help validate this object is only created after the following permission has been previously demanded in the current codepath if (null != connection) { connection.UserConnectionOptions.DemandPermission(); } else { constr.DemandPermission(); } } catch (System.Security.SecurityException) { System.Diagnostics.Debug.Assert(false, "unexpected SecurityException for current codepath"); throw; } #endif Debug.Assert((null != constr) && !constr.IsEmpty, "empty connectionstring"); ConnectionString = constr; if (constr.PossiblePrompt && !System.Environment.UserInteractive) { throw ODB.PossiblePromptNotUserInteractive(); } try { // this is the native DataLinks object which pools the native datasource/session OleDbServicesWrapper wrapper = OleDbConnectionInternal.GetObjectPool(); _datasrcwrp = new DataSourceWrapper(); // DataLinks wrapper will call IDataInitialize::GetDataSource to create the DataSource // uses constr.ActualConnectionString, no InfoMessageEvent checking wrapper.GetDataSource(constr, ref _datasrcwrp); Debug.Assert(!_datasrcwrp.IsInvalid, "bad DataSource"); // initialization is delayed because of OleDbConnectionStringBuilder only wants // pre-Initialize IDBPropertyInfo & IDBProperties on the data source if (null != connection) { _sessionwrp = new SessionWrapper(); // From the DataSource object, will call IDBInitialize.Initialize & IDBCreateSession.CreateSession // We always need both called so we use a single call for a single DangerousAddRef/DangerousRelease pair. OleDbHResult hr = _datasrcwrp.InitializeAndCreateSession(constr, ref _sessionwrp); // process the HResult here instead of from the SafeHandle because the possibility // of an InfoMessageEvent. if ((0 <= hr) && !_sessionwrp.IsInvalid) // process infonessage events { OleDbConnection.ProcessResults(hr, connection, connection); } else { Exception e = OleDbConnection.ProcessResults(hr, null, null); Debug.Assert(null != e, "CreateSessionError"); throw e; } Debug.Assert(!_sessionwrp.IsInvalid, "bad Session"); } } catch { if (null != _sessionwrp) { _sessionwrp.Dispose(); _sessionwrp = null; } if (null != _datasrcwrp) { _datasrcwrp.Dispose(); _datasrcwrp = null; } throw; } }
internal OleDbConnectionInternal(OleDbConnectionString constr, OleDbConnection connection) : base () { #if DEBUG try { // use this to help validate this object is only created after the following permission has been previously demanded in the current codepath if (null != connection) { connection.UserConnectionOptions.DemandPermission(); } else { constr.DemandPermission(); } } catch(System.Security.SecurityException) { System.Diagnostics.Debug.Assert(false, "unexpected SecurityException for current codepath"); throw; } #endif Debug.Assert((null != constr) && !constr.IsEmpty, "empty connectionstring"); ConnectionString = constr; if (constr.PossiblePrompt && !System.Environment.UserInteractive) { throw ODB.PossiblePromptNotUserInteractive(); } try { // this is the native DataLinks object which pools the native datasource/session OleDbServicesWrapper wrapper = OleDbConnectionInternal.GetObjectPool(); _datasrcwrp = new DataSourceWrapper(); // DataLinks wrapper will call IDataInitialize::GetDataSource to create the DataSource // uses constr.ActualConnectionString, no InfoMessageEvent checking wrapper.GetDataSource(constr, ref _datasrcwrp); Debug.Assert(!_datasrcwrp.IsInvalid, "bad DataSource"); // initialization is delayed because of OleDbConnectionStringBuilder only wants // pre-Initialize IDBPropertyInfo & IDBProperties on the data source if (null != connection) { _sessionwrp = new SessionWrapper(); // From the DataSource object, will call IDBInitialize.Initialize & IDBCreateSession.CreateSession // We always need both called so we use a single call for a single DangerousAddRef/DangerousRelease pair. OleDbHResult hr = _datasrcwrp.InitializeAndCreateSession(constr, ref _sessionwrp); // process the HResult here instead of from the SafeHandle because the possibility // of an InfoMessageEvent. if ((0 <= hr) && !_sessionwrp.IsInvalid) { // process infonessage events OleDbConnection.ProcessResults(hr, connection, connection); } else { Exception e = OleDbConnection.ProcessResults(hr, null, null); Debug.Assert(null != e, "CreateSessionError"); throw e; } Debug.Assert(!_sessionwrp.IsInvalid, "bad Session"); } } catch { if (null != _sessionwrp) { _sessionwrp.Dispose(); _sessionwrp = null; } if (null != _datasrcwrp) { _datasrcwrp.Dispose(); _datasrcwrp = null; } throw; } }