Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / DataOracleClient / System / Data / OracleClient / OracleConnection.cs / 1 / OracleConnection.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Data.OracleClient { using System; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Data.ProviderBase; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.Security; using System.Threading; using System.Text; using System.IO; using System.Configuration; internal enum TransactionState { AutoCommit, // We're currently in autocommit mode LocalStarted, // Local transaction has been started, but not committed GlobalStarted, // We're in a distributed (MTS) transaction }; //--------------------------------------------------------------------- // OracleConnection // // Implements the Oracle Connection object, which connects // to the Oracle server // [ DefaultEvent("InfoMessage") ] sealed public partial class OracleConnection : DbConnection, ICloneable { static private readonly object EventInfoMessage = new object(); // Construct from a connection string public OracleConnection( String connectionString ) : this () { ConnectionString = connectionString; } // (internal) Construct from an existing Connection object (copy constructor) internal OracleConnection( OracleConnection connection ) : this() { CopyFrom(connection); } [ ResCategoryAttribute(Res.OracleCategory_Data), DefaultValue(""), RecommendedAsConfigurable(true), RefreshProperties(RefreshProperties.All), ResDescriptionAttribute(Res.OracleConnection_ConnectionString), Editor("Microsoft.VSDesigner.Data.Oracle.Design.OracleConnectionStringEditor, " + AssemblyRef.MicrosoftVSDesigner, "System.Drawing.Design.UITypeEditor, " + AssemblyRef.SystemDrawing) ] override public string ConnectionString { get { return ConnectionString_Get(); } set { ConnectionString_Set(value); } } [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never) ] override public int ConnectionTimeout { // Oracle has no discernable or settable connection timeouts, so this // is being hidden from the user and we always return zero. (We have // to implement this because IDbConnection requires it) get { return 0; } } [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never) ] override public string Database { // Oracle has no notion of a "database", so this is being hidden from // the user and we always returns the empty string. (We have to implement // this because IDbConnection requires it) get { return String.Empty; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ResDescriptionAttribute(Res.OracleConnection_DataSource), ] override public string DataSource { get { OracleConnectionString connectionOptions = (OracleConnectionString)ConnectionOptions; string value = String.Empty; if (null != connectionOptions) value = connectionOptions.DataSource; return value; } } internal OciEnvironmentHandle EnvironmentHandle { get { return GetOpenInternalConnection().EnvironmentHandle; } } internal OciErrorHandle ErrorHandle { get { return GetOpenInternalConnection().ErrorHandle; } } internal bool HasTransaction { get { return GetOpenInternalConnection().HasTransaction; } } internal TimeSpan ServerTimeZoneAdjustmentToUTC { get { return GetOpenInternalConnection().GetServerTimeZoneAdjustmentToUTC(this); } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ResDescriptionAttribute(Res.OracleConnection_ServerVersion) ] override public string ServerVersion { get { return GetOpenInternalConnection().ServerVersion; } } internal bool ServerVersionAtLeastOracle8 { get { return GetOpenInternalConnection().ServerVersionAtLeastOracle8; } } internal bool ServerVersionAtLeastOracle9i { get { return GetOpenInternalConnection().ServerVersionAtLeastOracle9i; } } internal OciServiceContextHandle ServiceContextHandle { get { return GetOpenInternalConnection().ServiceContextHandle; } } internal OracleTransaction Transaction { get { return GetOpenInternalConnection().Transaction; } } internal TransactionState TransactionState { get { return GetOpenInternalConnection().TransactionState; } set { GetOpenInternalConnection().TransactionState = value; } } internal bool UnicodeEnabled { get { return GetOpenInternalConnection().UnicodeEnabled; } } new public OracleTransaction BeginTransaction() { return BeginTransaction(IsolationLevel.Unspecified); } new public OracleTransaction BeginTransaction(IsolationLevel il) { return (OracleTransaction)base.BeginTransaction(il); } override public void ChangeDatabase(String value) { IntPtr hscp; Bid.ScopeEnter(out hscp, "%d#, value='%ls'\n", ObjectID, value); try { // Oracle has no notion of a "database", so this is being hidden from // the user and we always throw. (We have to implement this because // IDbConnection requires it) throw ADP.ChangeDatabaseNotSupported(); } finally { Bid.ScopeLeave(ref hscp); } } internal void CheckError(OciErrorHandle errorHandle, int rc) { // Check the return code and perform the appropriate handling; either // throwing the exception or posting a warning message. switch ((OCI.RETURNCODE)rc) { case OCI.RETURNCODE.OCI_ERROR: // -1: Bad programming by the customer. case OCI.RETURNCODE.OCI_NO_DATA: //100: Bad programming by the customer/expected error. Exception exceptionToThrow = ADP.OracleError(errorHandle, rc); // If this connection is broken, make sure we note that fact and prevent it from being reused. if (null != errorHandle && errorHandle.ConnectionIsBroken) { OracleInternalConnection openConnection = GetOpenInternalConnection(); if (null != openConnection) { openConnection.ConnectionIsBroken(); // } } throw exceptionToThrow; case OCI.RETURNCODE.OCI_INVALID_HANDLE: // -2: Bad programming on my part. throw ADP.InvalidOperation(Res.GetString(Res.ADP_InternalError, rc)); case OCI.RETURNCODE.OCI_SUCCESS_WITH_INFO: // 1: Information Message OracleException infoMessage = OracleException.CreateException(errorHandle, rc); OracleInfoMessageEventArgs infoMessageEvent = new OracleInfoMessageEventArgs(infoMessage); OnInfoMessage(infoMessageEvent); break; default: if (rc < 0 || rc == (int)OCI.RETURNCODE.OCI_NEED_DATA) throw ADP.Simple(Res.GetString(Res.ADP_UnexpectedReturnCode, rc.ToString(CultureInfo.CurrentCulture))); Debug.Assert(false, "Unexpected return code: " + rc); // shouldn't be here for any reason. break; } } static public void ClearAllPools() { (new OraclePermission(System.Security.Permissions.PermissionState.Unrestricted)).Demand(); OracleConnectionFactory.SingletonInstance.ClearAllPools(); } static public void ClearPool(OracleConnection connection) { ADP.CheckArgumentNull(connection, "connection"); DbConnectionOptions connectionOptions = connection.UserConnectionOptions; if (null != connectionOptions) { connectionOptions.DemandPermission(); OracleConnectionFactory.SingletonInstance.ClearPool(connection); } } object ICloneable.Clone() { // We provide a clone that is closed; it would be very bad to hand out the // same handles again; instead they can do their own open and get their // own handles. OracleConnection clone = new OracleConnection(this); Bid.Trace(" %d#, clone=%d#\n", ObjectID, clone.ObjectID); return clone; } override public void Close() { InnerConnection.CloseConnection(this, ConnectionFactory); // does not require GC.KeepAlive(this) because of OnStateChange } internal void Commit() { GetOpenInternalConnection().Commit(); } new public OracleCommand CreateCommand() { OracleCommand cmd = new OracleCommand(); cmd.Connection = this; return cmd; } private void DisposeMe(bool disposing) { // MDAC 65459 } public void EnlistDistributedTransaction(System.EnterpriseServices.ITransaction distributedTransaction) { EnlistDistributedTransactionHelper(distributedTransaction); } internal byte[] GetBytes(string value, bool useNationalCharacterSet) { return GetOpenInternalConnection().GetBytes(value, useNationalCharacterSet); } internal OracleInternalConnection GetOpenInternalConnection() { DbConnectionInternal internalConnection = this.InnerConnection; if (internalConnection is OracleInternalConnection) return internalConnection as OracleInternalConnection; throw ADP.ClosedConnectionError(); } internal NativeBuffer GetScratchBuffer(int minSize) { return GetOpenInternalConnection().GetScratchBuffer(minSize); } internal string GetString(byte[] bytearray) { return GetOpenInternalConnection().GetString(bytearray); } internal string GetString(byte[] bytearray, bool useNationalCharacterSet) { return GetOpenInternalConnection().GetString(bytearray, useNationalCharacterSet); } override public void Open() { InnerConnection.OpenConnection(this, ConnectionFactory); OracleInternalConnection internalConnection = (InnerConnection as OracleInternalConnection); if (null != internalConnection) { internalConnection.FireDeferredInfoMessageEvents(this); } } internal void Rollback() { OracleInternalConnection internalConnection = InnerConnection as OracleInternalConnection; if (null != internalConnection) { internalConnection.Rollback(); } } internal void RollbackDeadTransaction() { GetOpenInternalConnection().RollbackDeadTransaction(); } [ ResCategoryAttribute(Res.OracleCategory_InfoMessage), ResDescriptionAttribute(Res.OracleConnection_InfoMessage) ] public event OracleInfoMessageEventHandler InfoMessage { add { Events.AddHandler(EventInfoMessage, value); } remove { Events.RemoveHandler(EventInfoMessage, value); } } internal void OnInfoMessage(OracleInfoMessageEventArgs infoMessageEvent) { OracleInfoMessageEventHandler handler = (OracleInfoMessageEventHandler) Events[EventInfoMessage]; if (null != handler) { handler(this, infoMessageEvent); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Data.OracleClient { using System; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Data.ProviderBase; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using System.Security; using System.Threading; using System.Text; using System.IO; using System.Configuration; internal enum TransactionState { AutoCommit, // We're currently in autocommit mode LocalStarted, // Local transaction has been started, but not committed GlobalStarted, // We're in a distributed (MTS) transaction }; //--------------------------------------------------------------------- // OracleConnection // // Implements the Oracle Connection object, which connects // to the Oracle server // [ DefaultEvent("InfoMessage") ] sealed public partial class OracleConnection : DbConnection, ICloneable { static private readonly object EventInfoMessage = new object(); // Construct from a connection string public OracleConnection( String connectionString ) : this () { ConnectionString = connectionString; } // (internal) Construct from an existing Connection object (copy constructor) internal OracleConnection( OracleConnection connection ) : this() { CopyFrom(connection); } [ ResCategoryAttribute(Res.OracleCategory_Data), DefaultValue(""), RecommendedAsConfigurable(true), RefreshProperties(RefreshProperties.All), ResDescriptionAttribute(Res.OracleConnection_ConnectionString), Editor("Microsoft.VSDesigner.Data.Oracle.Design.OracleConnectionStringEditor, " + AssemblyRef.MicrosoftVSDesigner, "System.Drawing.Design.UITypeEditor, " + AssemblyRef.SystemDrawing) ] override public string ConnectionString { get { return ConnectionString_Get(); } set { ConnectionString_Set(value); } } [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never) ] override public int ConnectionTimeout { // Oracle has no discernable or settable connection timeouts, so this // is being hidden from the user and we always return zero. (We have // to implement this because IDbConnection requires it) get { return 0; } } [ Browsable(false), EditorBrowsableAttribute(EditorBrowsableState.Never) ] override public string Database { // Oracle has no notion of a "database", so this is being hidden from // the user and we always returns the empty string. (We have to implement // this because IDbConnection requires it) get { return String.Empty; } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ResDescriptionAttribute(Res.OracleConnection_DataSource), ] override public string DataSource { get { OracleConnectionString connectionOptions = (OracleConnectionString)ConnectionOptions; string value = String.Empty; if (null != connectionOptions) value = connectionOptions.DataSource; return value; } } internal OciEnvironmentHandle EnvironmentHandle { get { return GetOpenInternalConnection().EnvironmentHandle; } } internal OciErrorHandle ErrorHandle { get { return GetOpenInternalConnection().ErrorHandle; } } internal bool HasTransaction { get { return GetOpenInternalConnection().HasTransaction; } } internal TimeSpan ServerTimeZoneAdjustmentToUTC { get { return GetOpenInternalConnection().GetServerTimeZoneAdjustmentToUTC(this); } } [ Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), ResDescriptionAttribute(Res.OracleConnection_ServerVersion) ] override public string ServerVersion { get { return GetOpenInternalConnection().ServerVersion; } } internal bool ServerVersionAtLeastOracle8 { get { return GetOpenInternalConnection().ServerVersionAtLeastOracle8; } } internal bool ServerVersionAtLeastOracle9i { get { return GetOpenInternalConnection().ServerVersionAtLeastOracle9i; } } internal OciServiceContextHandle ServiceContextHandle { get { return GetOpenInternalConnection().ServiceContextHandle; } } internal OracleTransaction Transaction { get { return GetOpenInternalConnection().Transaction; } } internal TransactionState TransactionState { get { return GetOpenInternalConnection().TransactionState; } set { GetOpenInternalConnection().TransactionState = value; } } internal bool UnicodeEnabled { get { return GetOpenInternalConnection().UnicodeEnabled; } } new public OracleTransaction BeginTransaction() { return BeginTransaction(IsolationLevel.Unspecified); } new public OracleTransaction BeginTransaction(IsolationLevel il) { return (OracleTransaction)base.BeginTransaction(il); } override public void ChangeDatabase(String value) { IntPtr hscp; Bid.ScopeEnter(out hscp, "%d#, value='%ls'\n", ObjectID, value); try { // Oracle has no notion of a "database", so this is being hidden from // the user and we always throw. (We have to implement this because // IDbConnection requires it) throw ADP.ChangeDatabaseNotSupported(); } finally { Bid.ScopeLeave(ref hscp); } } internal void CheckError(OciErrorHandle errorHandle, int rc) { // Check the return code and perform the appropriate handling; either // throwing the exception or posting a warning message. switch ((OCI.RETURNCODE)rc) { case OCI.RETURNCODE.OCI_ERROR: // -1: Bad programming by the customer. case OCI.RETURNCODE.OCI_NO_DATA: //100: Bad programming by the customer/expected error. Exception exceptionToThrow = ADP.OracleError(errorHandle, rc); // If this connection is broken, make sure we note that fact and prevent it from being reused. if (null != errorHandle && errorHandle.ConnectionIsBroken) { OracleInternalConnection openConnection = GetOpenInternalConnection(); if (null != openConnection) { openConnection.ConnectionIsBroken(); // } } throw exceptionToThrow; case OCI.RETURNCODE.OCI_INVALID_HANDLE: // -2: Bad programming on my part. throw ADP.InvalidOperation(Res.GetString(Res.ADP_InternalError, rc)); case OCI.RETURNCODE.OCI_SUCCESS_WITH_INFO: // 1: Information Message OracleException infoMessage = OracleException.CreateException(errorHandle, rc); OracleInfoMessageEventArgs infoMessageEvent = new OracleInfoMessageEventArgs(infoMessage); OnInfoMessage(infoMessageEvent); break; default: if (rc < 0 || rc == (int)OCI.RETURNCODE.OCI_NEED_DATA) throw ADP.Simple(Res.GetString(Res.ADP_UnexpectedReturnCode, rc.ToString(CultureInfo.CurrentCulture))); Debug.Assert(false, "Unexpected return code: " + rc); // shouldn't be here for any reason. break; } } static public void ClearAllPools() { (new OraclePermission(System.Security.Permissions.PermissionState.Unrestricted)).Demand(); OracleConnectionFactory.SingletonInstance.ClearAllPools(); } static public void ClearPool(OracleConnection connection) { ADP.CheckArgumentNull(connection, "connection"); DbConnectionOptions connectionOptions = connection.UserConnectionOptions; if (null != connectionOptions) { connectionOptions.DemandPermission(); OracleConnectionFactory.SingletonInstance.ClearPool(connection); } } object ICloneable.Clone() { // We provide a clone that is closed; it would be very bad to hand out the // same handles again; instead they can do their own open and get their // own handles. OracleConnection clone = new OracleConnection(this); Bid.Trace(" %d#, clone=%d#\n", ObjectID, clone.ObjectID); return clone; } override public void Close() { InnerConnection.CloseConnection(this, ConnectionFactory); // does not require GC.KeepAlive(this) because of OnStateChange } internal void Commit() { GetOpenInternalConnection().Commit(); } new public OracleCommand CreateCommand() { OracleCommand cmd = new OracleCommand(); cmd.Connection = this; return cmd; } private void DisposeMe(bool disposing) { // MDAC 65459 } public void EnlistDistributedTransaction(System.EnterpriseServices.ITransaction distributedTransaction) { EnlistDistributedTransactionHelper(distributedTransaction); } internal byte[] GetBytes(string value, bool useNationalCharacterSet) { return GetOpenInternalConnection().GetBytes(value, useNationalCharacterSet); } internal OracleInternalConnection GetOpenInternalConnection() { DbConnectionInternal internalConnection = this.InnerConnection; if (internalConnection is OracleInternalConnection) return internalConnection as OracleInternalConnection; throw ADP.ClosedConnectionError(); } internal NativeBuffer GetScratchBuffer(int minSize) { return GetOpenInternalConnection().GetScratchBuffer(minSize); } internal string GetString(byte[] bytearray) { return GetOpenInternalConnection().GetString(bytearray); } internal string GetString(byte[] bytearray, bool useNationalCharacterSet) { return GetOpenInternalConnection().GetString(bytearray, useNationalCharacterSet); } override public void Open() { InnerConnection.OpenConnection(this, ConnectionFactory); OracleInternalConnection internalConnection = (InnerConnection as OracleInternalConnection); if (null != internalConnection) { internalConnection.FireDeferredInfoMessageEvents(this); } } internal void Rollback() { OracleInternalConnection internalConnection = InnerConnection as OracleInternalConnection; if (null != internalConnection) { internalConnection.Rollback(); } } internal void RollbackDeadTransaction() { GetOpenInternalConnection().RollbackDeadTransaction(); } [ ResCategoryAttribute(Res.OracleCategory_InfoMessage), ResDescriptionAttribute(Res.OracleConnection_InfoMessage) ] public event OracleInfoMessageEventHandler InfoMessage { add { Events.AddHandler(EventInfoMessage, value); } remove { Events.RemoveHandler(EventInfoMessage, value); } } internal void OnInfoMessage(OracleInfoMessageEventArgs infoMessageEvent) { OracleInfoMessageEventHandler handler = (OracleInfoMessageEventHandler) Events[EventInfoMessage]; if (null != handler) { handler(this, infoMessageEvent); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BitmapEffectInputData.cs
- SafeFileMapViewHandle.cs
- EntityConnectionStringBuilder.cs
- CodeAssignStatement.cs
- TripleDESCryptoServiceProvider.cs
- DurableInstanceManager.cs
- AutomationElementIdentifiers.cs
- NamedPipeTransportBindingElement.cs
- WebBrowserPermission.cs
- XPathCompileException.cs
- ConstraintStruct.cs
- BinaryObjectInfo.cs
- ExpressionBuilder.cs
- DataSourceControl.cs
- ACL.cs
- ExpandCollapsePattern.cs
- TransformerInfoCollection.cs
- SubpageParagraph.cs
- CanonicalXml.cs
- XmlDictionaryWriter.cs
- Trace.cs
- TargetControlTypeAttribute.cs
- ImageDesigner.cs
- TimersDescriptionAttribute.cs
- BitmapCodecInfo.cs
- KerberosTicketHashIdentifierClause.cs
- ExitEventArgs.cs
- SelectionRange.cs
- XmlSchemaGroup.cs
- Monitor.cs
- RecognizerBase.cs
- DescendantOverDescendantQuery.cs
- NonSerializedAttribute.cs
- InstanceData.cs
- DrawingGroup.cs
- TraceInternal.cs
- PathGeometry.cs
- xdrvalidator.cs
- ControlPropertyNameConverter.cs
- SecurityCriticalDataForSet.cs
- AttributeEmitter.cs
- securitycriticaldataformultiplegetandset.cs
- Win32.cs
- ColumnProvider.cs
- ImplicitInputBrush.cs
- NamespaceCollection.cs
- PermissionSetTriple.cs
- Section.cs
- ThemeInfoAttribute.cs
- FieldToken.cs
- MetadataProperty.cs
- GuidTagList.cs
- DiagnosticEventProvider.cs
- FileStream.cs
- QilUnary.cs
- PeerFlooder.cs
- PolyBezierSegment.cs
- EventsTab.cs
- BufferBuilder.cs
- IncrementalHitTester.cs
- FamilyTypefaceCollection.cs
- GenericsNotImplementedException.cs
- As.cs
- VersionedStream.cs
- RuntimeHelpers.cs
- AuthStoreRoleProvider.cs
- DropTarget.cs
- StringDictionaryCodeDomSerializer.cs
- ZoneMembershipCondition.cs
- MatrixCamera.cs
- MutexSecurity.cs
- Bold.cs
- XPathDocument.cs
- ProxyGenerator.cs
- bidPrivateBase.cs
- CoTaskMemSafeHandle.cs
- CultureTableRecord.cs
- ControlDesigner.cs
- SmtpNegotiateAuthenticationModule.cs
- AnnotationMap.cs
- MatrixIndependentAnimationStorage.cs
- TextDpi.cs
- RemotingSurrogateSelector.cs
- SqlDataSourceCustomCommandPanel.cs
- TargetInvocationException.cs
- ArithmeticLiteral.cs
- ObjectContext.cs
- IpcManager.cs
- BuildDependencySet.cs
- OlePropertyStructs.cs
- NavigationWindowAutomationPeer.cs
- DesignerHost.cs
- HMACSHA512.cs
- DotExpr.cs
- AutomationPropertyInfo.cs
- SHA384CryptoServiceProvider.cs
- IPHostEntry.cs
- GridViewUpdateEventArgs.cs
- ContextStaticAttribute.cs
- MatrixStack.cs