internal void GetDataSource(OleDbConnectionString constr, ref DataSourceWrapper datasrcWrapper) { OleDbHResult hr; UnsafeNativeMethods.IDataInitializeGetDataSource GetDataSource = DangerousIDataInitializeGetDataSource; bool mustRelease = false; RuntimeHelpers.PrepareConstrainedRegions(); try { DangerousAddRef(ref mustRelease); // this is the string that DataLinks / OLE DB Services will use to create the provider string connectionString = constr.ActualConnectionString; // base.handle is the 'this' pointer for making the COM call to GetDataSource // the datasrcWrapper will store the IID_IDBInitialize pointer // call IDataInitiailze::GetDataSource via the delegate hr = GetDataSource(base.handle, IntPtr.Zero, ODB.CLSCTX_ALL, connectionString, ref ODB.IID_IDBInitialize, ref datasrcWrapper); } finally { if (mustRelease) { DangerousRelease(); } } if (hr < 0) { // ignore infomsg if (OleDbHResult.REGDB_E_CLASSNOTREG == hr) { throw ODB.ProviderUnavailable(constr.Provider, null); } Exception e = OleDbConnection.ProcessResults(hr, null, null); Debug.Assert(null != e, "CreateProviderError"); throw e; } else if (datasrcWrapper.IsInvalid) { SafeNativeMethods.Wrapper.ClearErrorInfo(); throw ODB.ProviderUnavailable(constr.Provider, null); } Debug.Assert(!datasrcWrapper.IsInvalid, "bad DataSource"); }
internal void GetDataSource(OleDbConnectionString constr, ref DataSourceWrapper datasrcWrapper) { OleDbHResult result; UnsafeNativeMethods.IDataInitializeGetDataSource dangerousIDataInitializeGetDataSource = this.DangerousIDataInitializeGetDataSource; bool success = false; RuntimeHelpers.PrepareConstrainedRegions(); try { base.DangerousAddRef(ref success); string actualConnectionString = constr.ActualConnectionString; result = dangerousIDataInitializeGetDataSource(base.handle, IntPtr.Zero, 0x17, actualConnectionString, ref ODB.IID_IDBInitialize, ref datasrcWrapper); } finally { if (success) { base.DangerousRelease(); } } if (result < OleDbHResult.S_OK) { if (OleDbHResult.REGDB_E_CLASSNOTREG == result) { throw ODB.ProviderUnavailable(constr.Provider, null); } throw OleDbConnection.ProcessResults(result, null, null); } if (datasrcWrapper.IsInvalid) { SafeNativeMethods.Wrapper.ClearErrorInfo(); throw ODB.ProviderUnavailable(constr.Provider, null); } }
internal void GetDataSource(OleDbConnectionString constr, ref DataSourceWrapper datasrcWrapper) { OleDbHResult hr; UnsafeNativeMethods.IDataInitializeGetDataSource GetDataSource = DangerousIDataInitializeGetDataSource !; bool mustRelease = false; RuntimeHelpers.PrepareConstrainedRegions(); try { DangerousAddRef(ref mustRelease); // this is the string that DataLinks / OLE DB Services will use to create the provider string connectionString = constr.ActualConnectionString !; // base.handle is the 'this' pointer for making the COM call to GetDataSource // the datasrcWrapper will store the IID_IDBInitialize pointer // call IDataInitiailze::GetDataSource via the delegate hr = GetDataSource(base.handle, IntPtr.Zero, ODB.CLSCTX_ALL, connectionString, ref ODB.IID_IDBInitialize, ref datasrcWrapper); } finally { if (mustRelease) { DangerousRelease(); } } if (hr < 0) { // ignore infomsg if (OleDbHResult.REGDB_E_CLASSNOTREG == hr) { throw ODB.ProviderUnavailable(constr.Provider, null); } Exception?e = OleDbConnection.ProcessResults(hr, null, null); Debug.Assert(null != e, "CreateProviderError"); throw e; } else if (datasrcWrapper.IsInvalid) { SafeNativeMethods.Wrapper.ClearErrorInfo(); throw ODB.ProviderUnavailable(constr.Provider, null); } Debug.Assert(!datasrcWrapper.IsInvalid, "bad DataSource"); }
internal OleDbConnectionInternal(OleDbConnectionString constr, OleDbConnection connection) { this.ConnectionString = constr; if (constr.PossiblePrompt && !Environment.UserInteractive) { throw ODB.PossiblePromptNotUserInteractive(); } try { OleDbServicesWrapper objectPool = GetObjectPool(); this._datasrcwrp = new DataSourceWrapper(); objectPool.GetDataSource(constr, ref this._datasrcwrp); if (connection != null) { this._sessionwrp = new SessionWrapper(); OleDbHResult hresult = this._datasrcwrp.InitializeAndCreateSession(constr, ref this._sessionwrp); if ((OleDbHResult.S_OK > hresult) || this._sessionwrp.IsInvalid) { throw OleDbConnection.ProcessResults(hresult, null, null); } OleDbConnection.ProcessResults(hresult, connection, connection); } } catch { if (this._sessionwrp != null) { this._sessionwrp.Dispose(); this._sessionwrp = null; } if (this._datasrcwrp != null) { this._datasrcwrp.Dispose(); this._datasrcwrp = null; } throw; } }
internal OleDbConnectionInternal(OleDbConnectionString constr, OleDbConnection connection) : base() { 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; } }