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
- NoClickablePointException.cs
- SafeLibraryHandle.cs
- PersonalizableTypeEntry.cs
- WebPartEventArgs.cs
- PreloadHost.cs
- XamlSerializer.cs
- ParseChildrenAsPropertiesAttribute.cs
- SerializationInfo.cs
- PolicyValidationException.cs
- ListViewTableCell.cs
- Set.cs
- ErrorWrapper.cs
- ConfigurationPropertyAttribute.cs
- AttributeConverter.cs
- XmlAttributeAttribute.cs
- CustomTypeDescriptor.cs
- UserThread.cs
- CatalogPartChrome.cs
- PageCodeDomTreeGenerator.cs
- Type.cs
- AutoResetEvent.cs
- XmlNodeChangedEventArgs.cs
- DataBoundControlAdapter.cs
- wmiprovider.cs
- DynamicResourceExtensionConverter.cs
- ComboBoxRenderer.cs
- DigitShape.cs
- EventLogEntryCollection.cs
- ListSortDescription.cs
- handlecollector.cs
- ComboBoxAutomationPeer.cs
- DoubleLinkList.cs
- BitVector32.cs
- TableItemPattern.cs
- XPathNodeInfoAtom.cs
- HandoffBehavior.cs
- CodeAttributeArgumentCollection.cs
- XmlSchemaInferenceException.cs
- assemblycache.cs
- NetworkCredential.cs
- SystemResourceKey.cs
- SqlUdtInfo.cs
- SystemColors.cs
- DictionaryManager.cs
- PrintDialog.cs
- FixedSOMPageElement.cs
- PropertyRecord.cs
- MimeMapping.cs
- Brush.cs
- EntityKey.cs
- CompositeActivityTypeDescriptorProvider.cs
- CacheChildrenQuery.cs
- UnauthorizedAccessException.cs
- CorrelationTokenTypeConvertor.cs
- SignatureToken.cs
- EmptyCollection.cs
- HttpHandlerActionCollection.cs
- SchemaImporter.cs
- StringAttributeCollection.cs
- NativeActivityFaultContext.cs
- UserControlParser.cs
- ApplicationId.cs
- OutKeywords.cs
- ScriptHandlerFactory.cs
- Localizer.cs
- ImageUrlEditor.cs
- DataExpression.cs
- RijndaelManaged.cs
- RichTextBox.cs
- DetailsViewDeleteEventArgs.cs
- ItemsPanelTemplate.cs
- EncoderExceptionFallback.cs
- ClientData.cs
- WindowsImpersonationContext.cs
- HostSecurityManager.cs
- GridViewItemAutomationPeer.cs
- DoubleUtil.cs
- ImageFormatConverter.cs
- CharEnumerator.cs
- UriTemplateVariableQueryValue.cs
- GPStream.cs
- StackSpiller.Temps.cs
- UidManager.cs
- SetterBaseCollection.cs
- MasterPage.cs
- TdsParameterSetter.cs
- ObjectTypeMapping.cs
- Empty.cs
- ListViewTableCell.cs
- XmlCDATASection.cs
- AssemblyInfo.cs
- RegexGroup.cs
- MatrixValueSerializer.cs
- TargetFrameworkAttribute.cs
- SettingsSavedEventArgs.cs
- UriWriter.cs
- PropertyCondition.cs
- SafeSecurityHelper.cs
- BooleanFunctions.cs
- StructureChangedEventArgs.cs