Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- DefaultDiscoveryService.cs
- WpfMemberInvoker.cs
- BasicViewGenerator.cs
- TableCellCollection.cs
- PropertySourceInfo.cs
- VersionValidator.cs
- NonParentingControl.cs
- MasterPageCodeDomTreeGenerator.cs
- MethodBuilder.cs
- PictureBox.cs
- XsltArgumentList.cs
- ExtendedPropertyDescriptor.cs
- ScaleTransform3D.cs
- ComboBoxDesigner.cs
- EntityDataSourceStatementEditor.cs
- DateTimeFormat.cs
- ContainerAction.cs
- autovalidator.cs
- DynamicDocumentPaginator.cs
- SAPICategories.cs
- util.cs
- SqlCacheDependencyDatabase.cs
- ListViewHitTestInfo.cs
- StringExpressionSet.cs
- Vector.cs
- XmlBoundElement.cs
- FtpCachePolicyElement.cs
- SqlNotificationRequest.cs
- _UncName.cs
- DataServiceRequestArgs.cs
- Polyline.cs
- WebAdminConfigurationHelper.cs
- MsmqInputChannel.cs
- Filter.cs
- ResourceContainer.cs
- Thickness.cs
- EntryPointNotFoundException.cs
- TypeForwardedToAttribute.cs
- SetState.cs
- IProvider.cs
- StringResourceManager.cs
- DataFieldConverter.cs
- IdentifierService.cs
- SqlDataSourceWizardForm.cs
- MessageEventSubscriptionService.cs
- ChildTable.cs
- MaskInputRejectedEventArgs.cs
- RoleManagerEventArgs.cs
- Unit.cs
- DataGridState.cs
- KeySpline.cs
- Accessors.cs
- TemplateAction.cs
- ExclusiveTcpTransportManager.cs
- AppDomainProtocolHandler.cs
- PrintController.cs
- OpenTypeLayout.cs
- DynamicILGenerator.cs
- SafeHandles.cs
- ToolStripSplitStackLayout.cs
- CompilationPass2TaskInternal.cs
- KernelTypeValidation.cs
- UnrecognizedPolicyAssertionElement.cs
- TextAction.cs
- Bind.cs
- BitmapCacheBrush.cs
- LeaseManager.cs
- XmlSchemaGroup.cs
- ColorTransform.cs
- DependencyPropertyHelper.cs
- JsonReaderDelegator.cs
- ExpressionCopier.cs
- DoubleStorage.cs
- PhysicalOps.cs
- EntityObject.cs
- XamlStyleSerializer.cs
- SelectionEditingBehavior.cs
- MenuStrip.cs
- RequestCache.cs
- SqlCacheDependencyDatabase.cs
- MailHeaderInfo.cs
- System.Data.OracleClient_BID.cs
- AlternateView.cs
- Activator.cs
- SrgsElementFactory.cs
- XmlUnspecifiedAttribute.cs
- Brush.cs
- HttpStreamFormatter.cs
- SchemaExporter.cs
- RegexInterpreter.cs
- CharAnimationUsingKeyFrames.cs
- MenuBase.cs
- StringCollectionMarkupSerializer.cs
- _Connection.cs
- SudsCommon.cs
- ToolBar.cs
- base64Transforms.cs
- RtfToXamlLexer.cs
- StatusBarAutomationPeer.cs
- SymLanguageVendor.cs