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
- SimpleHandlerFactory.cs
- GlyphElement.cs
- DataGridColumnFloatingHeader.cs
- DBConnectionString.cs
- TypeDescriptionProviderAttribute.cs
- ProtocolElementCollection.cs
- Int32KeyFrameCollection.cs
- TemplateBamlRecordReader.cs
- safesecurityhelperavalon.cs
- Stroke.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- DuplicateDetector.cs
- XmlDocument.cs
- MimeBasePart.cs
- GenerateScriptTypeAttribute.cs
- FontUnitConverter.cs
- MetadataItemEmitter.cs
- GridViewRowCollection.cs
- ScriptReferenceEventArgs.cs
- PerCallInstanceContextProvider.cs
- ObjectDisposedException.cs
- CanonicalFontFamilyReference.cs
- Gdiplus.cs
- COM2IVsPerPropertyBrowsingHandler.cs
- ShaderEffect.cs
- TrustSection.cs
- Primitive.cs
- ExpressionList.cs
- DocumentPageTextView.cs
- SectionXmlInfo.cs
- XmlDataLoader.cs
- validationstate.cs
- WorkflowWebService.cs
- InstanceData.cs
- NotificationContext.cs
- CodeAttributeArgumentCollection.cs
- CookieParameter.cs
- MonthChangedEventArgs.cs
- CompModSwitches.cs
- StateWorkerRequest.cs
- PublishLicense.cs
- CodeNamespaceImportCollection.cs
- SocketPermission.cs
- webeventbuffer.cs
- ContentElementCollection.cs
- SqlCommandAsyncResult.cs
- CurrentTimeZone.cs
- CacheOutputQuery.cs
- DataControlPagerLinkButton.cs
- BufferedStream.cs
- BaseDataBoundControl.cs
- SQLStringStorage.cs
- ScriptReference.cs
- LongPath.cs
- FileDialog.cs
- MetadataArtifactLoaderCompositeFile.cs
- PropertyInformationCollection.cs
- Version.cs
- PropertyGridCommands.cs
- BypassElementCollection.cs
- MessageDecoder.cs
- SecurityContextSecurityTokenResolver.cs
- ResourceProviderFactory.cs
- GeneralTransform3DGroup.cs
- FrameSecurityDescriptor.cs
- DescendantOverDescendantQuery.cs
- HierarchicalDataSourceControl.cs
- SqlGenericUtil.cs
- CallSite.cs
- RequestTimeoutManager.cs
- ContentTypeSettingDispatchMessageFormatter.cs
- Converter.cs
- NoResizeSelectionBorderGlyph.cs
- TrackingMemoryStream.cs
- Underline.cs
- PathFigureCollectionConverter.cs
- Transform3D.cs
- IIS7UserPrincipal.cs
- SerializationObjectManager.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- DescendantBaseQuery.cs
- EntityContainerEmitter.cs
- LogoValidationException.cs
- OwnerDrawPropertyBag.cs
- SpeechAudioFormatInfo.cs
- FileController.cs
- PenLineCapValidation.cs
- DoubleIndependentAnimationStorage.cs
- DesignRelationCollection.cs
- DictionaryEntry.cs
- SchemaCompiler.cs
- TdsValueSetter.cs
- StringExpressionSet.cs
- StylusLogic.cs
- IApplicationTrustManager.cs
- ButtonColumn.cs
- DeclarationUpdate.cs
- EndOfStreamException.cs
- ListContractAdapter.cs
- TemplateBindingExtensionConverter.cs