Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Data / Microsoft / SqlServer / Server / sqlcontext.cs / 1 / sqlcontext.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //daltodov //----------------------------------------------------------------------------- namespace Microsoft.SqlServer.Server { using System; using System.Data.Common; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Diagnostics; using System.Security.Principal; #if WINFSInternalOnly internal #else public #endif sealed class SqlContext { // There are no publicly visible instance methods/properties on SqlContext. // With the current design, the user should never get an actual instance of // this class. Instances are only used internally to hold owned objects // such as SqlPipe and SqlTriggerContext. private SmiContext _smiContext; private SqlPipe _pipe; private SqlTriggerContext _triggerContext; private SqlContext( SmiContext smiContext ) { _smiContext = smiContext; _smiContext.OutOfScope += new EventHandler(OnOutOfScope); } // // Public API // public static bool IsAvailable { get { bool result = InOutOfProcHelper.InProc; return result; } } // Get the SqlPipe (if any) for the current scope. public static SqlPipe Pipe { get { return CurrentContext.InstancePipe; } } // Get the SqlTriggerContext (if any) for the current scope. public static SqlTriggerContext TriggerContext { get { return CurrentContext.InstanceTriggerContext; } } public static WindowsIdentity WindowsIdentity{ get { return CurrentContext.InstanceWindowsIdentity; } } // // Internal class methods // // CurrentContext should be the *only* way to get to an instance of SqlContext. private static SqlContext CurrentContext { get { SmiContext smiContext = SmiContextFactory.Instance.GetCurrentContext(); SqlContext result = (SqlContext)smiContext.GetContextValue( (int)SmiContextFactory.ContextKey.SqlContext ); if ( null == result ) { result = new SqlContext( smiContext ); smiContext.SetContextValue( (int)SmiContextFactory.ContextKey.SqlContext, result ); } return result; } } // // Internal instance methods // private SqlPipe InstancePipe { get { if ( null == _pipe && _smiContext.HasContextPipe ) { _pipe = new SqlPipe( _smiContext ); } Debug.Assert( null == _pipe || _smiContext.HasContextPipe, "Caching logic error for contained pipe!" ); return _pipe; } } private SqlTriggerContext InstanceTriggerContext { get { if ( null == _triggerContext ) { bool[] columnsUpdated; TriggerAction triggerAction; SqlXml eventInstanceData; SmiEventSink_Default eventSink = new SmiEventSink_Default(); _smiContext.GetTriggerInfo(eventSink, out columnsUpdated, out triggerAction, out eventInstanceData); eventSink.ProcessMessagesAndThrow(); if (TriggerAction.Invalid != triggerAction) { _triggerContext = new SqlTriggerContext( triggerAction, columnsUpdated, eventInstanceData ); } } return _triggerContext; } } private WindowsIdentity InstanceWindowsIdentity { get { return _smiContext.WindowsIdentity; } } // Called whenever the context goes out of scope, we need to make // sure that we release internal state, such as the pipe's record buffer private void OnOutOfScope( object s, EventArgs e ) { if (Bid.AdvancedOn) { Bid.Trace( "SqlContext is out of scope\n" ); } if ( null != _pipe ) { _pipe.OnOutOfScope(); } _triggerContext = null; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //daltodov //----------------------------------------------------------------------------- namespace Microsoft.SqlServer.Server { using System; using System.Data.Common; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Diagnostics; using System.Security.Principal; #if WINFSInternalOnly internal #else public #endif sealed class SqlContext { // There are no publicly visible instance methods/properties on SqlContext. // With the current design, the user should never get an actual instance of // this class. Instances are only used internally to hold owned objects // such as SqlPipe and SqlTriggerContext. private SmiContext _smiContext; private SqlPipe _pipe; private SqlTriggerContext _triggerContext; private SqlContext( SmiContext smiContext ) { _smiContext = smiContext; _smiContext.OutOfScope += new EventHandler(OnOutOfScope); } // // Public API // public static bool IsAvailable { get { bool result = InOutOfProcHelper.InProc; return result; } } // Get the SqlPipe (if any) for the current scope. public static SqlPipe Pipe { get { return CurrentContext.InstancePipe; } } // Get the SqlTriggerContext (if any) for the current scope. public static SqlTriggerContext TriggerContext { get { return CurrentContext.InstanceTriggerContext; } } public static WindowsIdentity WindowsIdentity{ get { return CurrentContext.InstanceWindowsIdentity; } } // // Internal class methods // // CurrentContext should be the *only* way to get to an instance of SqlContext. private static SqlContext CurrentContext { get { SmiContext smiContext = SmiContextFactory.Instance.GetCurrentContext(); SqlContext result = (SqlContext)smiContext.GetContextValue( (int)SmiContextFactory.ContextKey.SqlContext ); if ( null == result ) { result = new SqlContext( smiContext ); smiContext.SetContextValue( (int)SmiContextFactory.ContextKey.SqlContext, result ); } return result; } } // // Internal instance methods // private SqlPipe InstancePipe { get { if ( null == _pipe && _smiContext.HasContextPipe ) { _pipe = new SqlPipe( _smiContext ); } Debug.Assert( null == _pipe || _smiContext.HasContextPipe, "Caching logic error for contained pipe!" ); return _pipe; } } private SqlTriggerContext InstanceTriggerContext { get { if ( null == _triggerContext ) { bool[] columnsUpdated; TriggerAction triggerAction; SqlXml eventInstanceData; SmiEventSink_Default eventSink = new SmiEventSink_Default(); _smiContext.GetTriggerInfo(eventSink, out columnsUpdated, out triggerAction, out eventInstanceData); eventSink.ProcessMessagesAndThrow(); if (TriggerAction.Invalid != triggerAction) { _triggerContext = new SqlTriggerContext( triggerAction, columnsUpdated, eventInstanceData ); } } return _triggerContext; } } private WindowsIdentity InstanceWindowsIdentity { get { return _smiContext.WindowsIdentity; } } // Called whenever the context goes out of scope, we need to make // sure that we release internal state, such as the pipe's record buffer private void OnOutOfScope( object s, EventArgs e ) { if (Bid.AdvancedOn) { Bid.Trace( "SqlContext is out of scope\n" ); } if ( null != _pipe ) { _pipe.OnOutOfScope(); } _triggerContext = null; } } } // 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
- RootBuilder.cs
- MdImport.cs
- BindingCompleteEventArgs.cs
- _DisconnectOverlappedAsyncResult.cs
- GridView.cs
- FrameworkPropertyMetadata.cs
- RecordBuilder.cs
- XsdDuration.cs
- ClientSideProviderDescription.cs
- Help.cs
- BezierSegment.cs
- EngineSiteSapi.cs
- BulletedList.cs
- TripleDES.cs
- BinaryNode.cs
- TypeSource.cs
- FontDriver.cs
- ClientTargetSection.cs
- ServiceEndpointElementCollection.cs
- ModuleBuilderData.cs
- ConnectionStringSettings.cs
- JsonFormatWriterGenerator.cs
- XmlNullResolver.cs
- CaseExpr.cs
- EditingMode.cs
- WebResponse.cs
- StackBuilderSink.cs
- TargetConverter.cs
- TaskFileService.cs
- Synchronization.cs
- DSACryptoServiceProvider.cs
- SspiWrapper.cs
- SecUtil.cs
- GiveFeedbackEventArgs.cs
- TextDecoration.cs
- TrackingProfile.cs
- FormsAuthenticationConfiguration.cs
- CommandExpr.cs
- TdsValueSetter.cs
- XmlSchemaAppInfo.cs
- path.cs
- _NetRes.cs
- ContainerParagraph.cs
- MissingSatelliteAssemblyException.cs
- CopyCodeAction.cs
- IndexedString.cs
- EditorBrowsableAttribute.cs
- SoapParser.cs
- XmlDictionaryReaderQuotasElement.cs
- FileInfo.cs
- tooltip.cs
- DbConnectionClosed.cs
- MenuItemCollection.cs
- EnvelopedPkcs7.cs
- oledbconnectionstring.cs
- AsymmetricAlgorithm.cs
- Select.cs
- EntityConnectionStringBuilder.cs
- LinkConverter.cs
- x509utils.cs
- TableProviderWrapper.cs
- OleDbConnectionFactory.cs
- ViewKeyConstraint.cs
- DispatcherEventArgs.cs
- Throw.cs
- ProcessInputEventArgs.cs
- SemanticResultKey.cs
- BaseCAMarshaler.cs
- RecordManager.cs
- AnimationTimeline.cs
- BindingExpression.cs
- Parsers.cs
- AcceptorSessionSymmetricTransportSecurityProtocol.cs
- CollectionEditorDialog.cs
- Pair.cs
- CheckBox.cs
- SingleSelectRootGridEntry.cs
- CellParagraph.cs
- PrintController.cs
- BamlRecordReader.cs
- PathFigureCollection.cs
- RectKeyFrameCollection.cs
- SiteIdentityPermission.cs
- StyleSheetDesigner.cs
- PopupRootAutomationPeer.cs
- InputScopeAttribute.cs
- DispatchWrapper.cs
- BindingMAnagerBase.cs
- RIPEMD160Managed.cs
- MemberMemberBinding.cs
- FacetValueContainer.cs
- PriorityItem.cs
- DashStyles.cs
- GetWinFXPath.cs
- ConfigurationManagerInternal.cs
- LinkedResourceCollection.cs
- SessionStateContainer.cs
- UserNameServiceElement.cs
- AnnotationObservableCollection.cs
- NullableLongMinMaxAggregationOperator.cs