Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ZipIOExtraFieldZip64Element.cs
- XPathSelectionIterator.cs
- ControlAdapter.cs
- ConnectionPointCookie.cs
- CodeBinaryOperatorExpression.cs
- TextPatternIdentifiers.cs
- Transform.cs
- ManagementObject.cs
- XappLauncher.cs
- RNGCryptoServiceProvider.cs
- ConfigurationSectionGroupCollection.cs
- EntityDataSourceContainerNameConverter.cs
- MenuItem.cs
- JsonClassDataContract.cs
- FeatureSupport.cs
- DoubleLinkListEnumerator.cs
- TemplateModeChangedEventArgs.cs
- GCHandleCookieTable.cs
- UnsafeNativeMethods.cs
- TemplateInstanceAttribute.cs
- DATA_BLOB.cs
- DesignerDataSourceView.cs
- ManagementException.cs
- EntityContainerEmitter.cs
- AutoResetEvent.cs
- FlowLayoutPanel.cs
- DropShadowBitmapEffect.cs
- CommonRemoteMemoryBlock.cs
- COM2Properties.cs
- DateTimeConverter.cs
- ipaddressinformationcollection.cs
- DBParameter.cs
- EdgeProfileValidation.cs
- XmlSchemaValidator.cs
- TcpTransportManager.cs
- MetadataPropertyAttribute.cs
- SamlAssertion.cs
- PageContent.cs
- Size.cs
- TypeHelper.cs
- StreamReader.cs
- WebPartAddingEventArgs.cs
- BlurBitmapEffect.cs
- AppDomain.cs
- NavigateEvent.cs
- SharedUtils.cs
- DataRow.cs
- CustomDictionarySources.cs
- ImageList.cs
- XPathDocumentIterator.cs
- AppDomain.cs
- TypeBuilder.cs
- ConditionalAttribute.cs
- sqlcontext.cs
- FrameworkElement.cs
- XmlHelper.cs
- ellipse.cs
- MobileErrorInfo.cs
- DataRelationCollection.cs
- PowerStatus.cs
- AsyncOperationManager.cs
- Pair.cs
- XmlStringTable.cs
- TemplateAction.cs
- XmlMemberMapping.cs
- SoapAttributeOverrides.cs
- ImageBrush.cs
- ItemList.cs
- InvokeAction.cs
- TextTreeUndoUnit.cs
- QueryStringParameter.cs
- SystemNetworkInterface.cs
- Matrix.cs
- CalendarDateRange.cs
- GridPattern.cs
- ValueUtilsSmi.cs
- TargetPerspective.cs
- ThreadAbortException.cs
- AdapterUtil.cs
- SchemaTypeEmitter.cs
- CacheMemory.cs
- DataObjectCopyingEventArgs.cs
- IDReferencePropertyAttribute.cs
- Vector3DAnimation.cs
- _TransmitFileOverlappedAsyncResult.cs
- HttpSessionStateBase.cs
- CorrelationKey.cs
- TabControl.cs
- EntityDataSourceDesigner.cs
- DbParameterHelper.cs
- PlatformCulture.cs
- HuffModule.cs
- ObjectListComponentEditor.cs
- TypeKeyValue.cs
- CellTreeNodeVisitors.cs
- ResizeGrip.cs
- TextCompositionEventArgs.cs
- SHA1Managed.cs
- _ScatterGatherBuffers.cs
- SpecularMaterial.cs