1 //------------------------------------------------------------------------------
2 // <copyright file="OdbcConnectionOpen.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">[....]</owner>
6 // <owner current="true" primary="false">[....]</owner>
7 //------------------------------------------------------------------------------
11 using System.Data.Common;
12 using System.Data.ProviderBase;
13 using System.Threading;
14 using SysTx = System.Transactions;
16 namespace System.Data.Odbc {
17 sealed internal class OdbcConnectionOpen : DbConnectionInternal {
19 // Construct from a compiled connection string
20 internal OdbcConnectionOpen(OdbcConnection outerConnection, OdbcConnectionString connectionOptions) {
22 try { // use this to help validate this object is only created after the following permission has been previously demanded in the current codepath
23 if (null != outerConnection) {
24 outerConnection.UserConnectionOptions.DemandPermission();
27 connectionOptions.DemandPermission();
30 catch(System.Security.SecurityException) {
31 System.Diagnostics.Debug.Assert(false, "unexpected SecurityException for current codepath");
35 OdbcEnvironmentHandle environmentHandle = OdbcEnvironment.GetGlobalEnvironmentHandle();
36 outerConnection.ConnectionHandle = new OdbcConnectionHandle(outerConnection, connectionOptions, environmentHandle);
39 internal OdbcConnection OuterConnection {
41 OdbcConnection outerConnection = (OdbcConnection)Owner;
43 if (null == outerConnection)
44 throw ODBC.OpenConnectionNoOwner();
46 return outerConnection;
50 override public string ServerVersion {
52 return OuterConnection.Open_GetServerVersion();
56 override protected void Activate(SysTx.Transaction transaction) {
57 OdbcConnection.ExecutePermission.Demand();
60 override public DbTransaction BeginTransaction(IsolationLevel isolevel) {
61 return BeginOdbcTransaction(isolevel);
64 internal OdbcTransaction BeginOdbcTransaction(IsolationLevel isolevel) {
65 return OuterConnection.Open_BeginTransaction(isolevel);
68 override public void ChangeDatabase(string value) {
69 OuterConnection.Open_ChangeDatabase(value);
72 override protected DbReferenceCollection CreateReferenceCollection() {
73 return new OdbcReferenceCollection();
76 override protected void Deactivate() {
77 NotifyWeakReference(OdbcReferenceCollection.Closing);
80 override public void EnlistTransaction(SysTx.Transaction transaction) {
81 OuterConnection.Open_EnlistTransaction(transaction);