Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- FullTrustAssembly.cs
- ObjectAnimationUsingKeyFrames.cs
- ResizeGrip.cs
- CompilationSection.cs
- FixedStringLookup.cs
- PropertyMapper.cs
- ThicknessConverter.cs
- MessageDecoder.cs
- DataGridViewHitTestInfo.cs
- UrlMapping.cs
- PanelDesigner.cs
- StructuralCache.cs
- AQNBuilder.cs
- ErasingStroke.cs
- PageSettings.cs
- Hyperlink.cs
- SqlCacheDependencyDatabase.cs
- DllNotFoundException.cs
- NodeCounter.cs
- ContractMapping.cs
- SpotLight.cs
- ProgressBar.cs
- ObjectDataSourceStatusEventArgs.cs
- SQLResource.cs
- SmtpMail.cs
- DocumentEventArgs.cs
- ListenerElementsCollection.cs
- GridViewRowCollection.cs
- _SingleItemRequestCache.cs
- TypeBuilderInstantiation.cs
- SerialPort.cs
- StringSource.cs
- InsufficientMemoryException.cs
- TemplateNameScope.cs
- CultureSpecificCharacterBufferRange.cs
- WebPartEditVerb.cs
- ListViewItemMouseHoverEvent.cs
- xmlformatgeneratorstatics.cs
- ConfigurationManagerInternalFactory.cs
- TrackingMemoryStream.cs
- InstanceStoreQueryResult.cs
- RectValueSerializer.cs
- MenuAutoFormat.cs
- ContainerVisual.cs
- SizeAnimationBase.cs
- SortKey.cs
- SharedConnectionInfo.cs
- AuthenticationServiceManager.cs
- CompareInfo.cs
- SqlFlattener.cs
- XPathCompileException.cs
- CacheMemory.cs
- EndpointDiscoveryMetadataCD1.cs
- StrokeDescriptor.cs
- SafeFileMappingHandle.cs
- PnrpPeerResolverElement.cs
- TextElement.cs
- AutomationEvent.cs
- PlacementWorkspace.cs
- TemplateFactory.cs
- Exception.cs
- ItemChangedEventArgs.cs
- ChannelFactory.cs
- ArraySortHelper.cs
- SwitchLevelAttribute.cs
- WinEventQueueItem.cs
- UrlAuthFailedErrorFormatter.cs
- Expression.DebuggerProxy.cs
- GeneralTransform3DGroup.cs
- WorkflowMarkupSerializationProvider.cs
- RegularExpressionValidator.cs
- Avt.cs
- MeasurementDCInfo.cs
- Random.cs
- ErrorHandler.cs
- RecognitionResult.cs
- CompressionTransform.cs
- MSG.cs
- DataGridViewRowPrePaintEventArgs.cs
- ListControl.cs
- FaultDescription.cs
- Page.cs
- ReadOnlyCollectionBase.cs
- TemplateLookupAction.cs
- VerificationException.cs
- MatchingStyle.cs
- QueryOptionExpression.cs
- DataTableReader.cs
- IPPacketInformation.cs
- WebPartManager.cs
- MULTI_QI.cs
- InterleavedZipPartStream.cs
- HitTestResult.cs
- APCustomTypeDescriptor.cs
- QueryGenerator.cs
- SoapTypeAttribute.cs
- HtmlInputControl.cs
- FixedFlowMap.cs
- CodePropertyReferenceExpression.cs
- storagemappingitemcollection.viewdictionary.cs