Code:
/ FX-1434 / FX-1434 / 1.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
- VarRemapper.cs
- DispatcherSynchronizationContext.cs
- Gdiplus.cs
- InputProcessorProfilesLoader.cs
- PerformanceCounterPermissionEntryCollection.cs
- DataServiceRequestException.cs
- NetworkInformationPermission.cs
- ConfigurationSchemaErrors.cs
- CalendarDay.cs
- URLAttribute.cs
- XmlProcessingInstruction.cs
- Completion.cs
- OptimalBreakSession.cs
- EventRoute.cs
- CqlWriter.cs
- ProviderUtil.cs
- DataGridRowAutomationPeer.cs
- XhtmlTextWriter.cs
- NullableConverter.cs
- TcpClientSocketManager.cs
- Point.cs
- ReliableReplySessionChannel.cs
- PeerResolver.cs
- EncoderFallback.cs
- EditBehavior.cs
- WebRequestModuleElement.cs
- AsyncCompletedEventArgs.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- TemplateXamlTreeBuilder.cs
- CodeValidator.cs
- XmlNodeReader.cs
- TextRangeBase.cs
- SqlCacheDependency.cs
- InputBinder.cs
- XmlSerializableWriter.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- AnnotationResourceCollection.cs
- MenuCommands.cs
- WebBaseEventKeyComparer.cs
- ArrangedElement.cs
- ResourcePermissionBase.cs
- TracingConnectionInitiator.cs
- SignatureToken.cs
- HeaderedContentControl.cs
- MailSettingsSection.cs
- DragEvent.cs
- DataMemberFieldEditor.cs
- DataGridCommandEventArgs.cs
- CheckedListBox.cs
- AuthorizationRule.cs
- DataPagerFieldCommandEventArgs.cs
- OracleException.cs
- PrintPreviewControl.cs
- CellCreator.cs
- RestHandlerFactory.cs
- PolygonHotSpot.cs
- SchemaNotation.cs
- InvalidateEvent.cs
- AssemblyCollection.cs
- ObjectPersistData.cs
- ImageInfo.cs
- Bind.cs
- Image.cs
- BulletDecorator.cs
- XmlSchemaExternal.cs
- XmlSchemaSimpleTypeList.cs
- Int64Storage.cs
- TreeNodeCollection.cs
- OrCondition.cs
- Socket.cs
- BinaryReader.cs
- UnSafeCharBuffer.cs
- DateTimeConstantAttribute.cs
- CodeMemberField.cs
- DrawingCollection.cs
- WindowInteractionStateTracker.cs
- BufferAllocator.cs
- MeshGeometry3D.cs
- SplineQuaternionKeyFrame.cs
- HMACRIPEMD160.cs
- BlurEffect.cs
- MultiSelector.cs
- DisplayMemberTemplateSelector.cs
- RSAOAEPKeyExchangeDeformatter.cs
- WebPartConnectVerb.cs
- BindingFormattingDialog.cs
- DataPagerCommandEventArgs.cs
- SHA512.cs
- Popup.cs
- DelegateSerializationHolder.cs
- TextRunTypographyProperties.cs
- UmAlQuraCalendar.cs
- StatusStrip.cs
- XmlUrlResolver.cs
- PointKeyFrameCollection.cs
- PrePostDescendentsWalker.cs
- CssStyleCollection.cs
- BitVector32.cs
- OutputCacheProfileCollection.cs
- CqlIdentifiers.cs