Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / Microsoft / SqlServer / Server / sqlcontext.cs / 1305376 / 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; public 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
- CaseInsensitiveComparer.cs
- Axis.cs
- OperationSelectorBehavior.cs
- DtdParser.cs
- ChannelDispatcherCollection.cs
- XPathMultyIterator.cs
- Axis.cs
- OdbcError.cs
- XmlResolver.cs
- ProgressBarRenderer.cs
- WebEventCodes.cs
- CatalogUtil.cs
- ConfigurationValidatorBase.cs
- UnknownBitmapDecoder.cs
- DependencyPropertyConverter.cs
- FastEncoderWindow.cs
- ToolStripButton.cs
- LightweightCodeGenerator.cs
- DSGeneratorProblem.cs
- DesignerVerbCollection.cs
- XmlSchemaType.cs
- WindowsListViewGroupHelper.cs
- ContextMenuService.cs
- OdbcCommand.cs
- SchemaMapping.cs
- Serialization.cs
- DockPanel.cs
- IProvider.cs
- DoubleCollectionConverter.cs
- WebPartAuthorizationEventArgs.cs
- ToolStripComboBox.cs
- MonitorWrapper.cs
- VerticalAlignConverter.cs
- Point4D.cs
- PartBasedPackageProperties.cs
- dbdatarecord.cs
- ThemeDirectoryCompiler.cs
- validation.cs
- JournalEntry.cs
- LayoutInformation.cs
- ISAPIWorkerRequest.cs
- Roles.cs
- ControllableStoryboardAction.cs
- ThrowHelper.cs
- MouseDevice.cs
- ExtenderControl.cs
- DataServiceKeyAttribute.cs
- SchemaTableColumn.cs
- SchemaNames.cs
- IMembershipProvider.cs
- QueryRewriter.cs
- DataGridViewRowEventArgs.cs
- FieldNameLookup.cs
- BitmapEffectDrawingContent.cs
- SQLMoneyStorage.cs
- ListMarkerSourceInfo.cs
- WebRequestModuleElement.cs
- XmlSchemaObjectTable.cs
- BitmapPalette.cs
- EventlogProvider.cs
- InvalidDataException.cs
- MarkupCompilePass2.cs
- PropertyInfoSet.cs
- Fonts.cs
- Size3DConverter.cs
- EndPoint.cs
- SecurityElement.cs
- _NTAuthentication.cs
- WinEventQueueItem.cs
- GiveFeedbackEvent.cs
- CompilerParameters.cs
- SiteMembershipCondition.cs
- HttpModuleAction.cs
- HtmlGenericControl.cs
- DeviceContext.cs
- CanonicalXml.cs
- CryptoSession.cs
- Rijndael.cs
- BaseUriHelper.cs
- SiteMapHierarchicalDataSourceView.cs
- ImpersonationContext.cs
- DesignerActionHeaderItem.cs
- AlignmentXValidation.cs
- ToolStripItemEventArgs.cs
- SchemaReference.cs
- PersonalizationAdministration.cs
- Point3DAnimation.cs
- TemplateField.cs
- DataTable.cs
- XmlChildEnumerator.cs
- MbpInfo.cs
- HttpResponse.cs
- RelatedView.cs
- GcSettings.cs
- ProcessModuleCollection.cs
- CatalogPartCollection.cs
- SessionPageStatePersister.cs
- WebPartManager.cs
- PeerName.cs
- ProcessActivityTreeOptions.cs