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
- Content.cs
- _HTTPDateParse.cs
- ListChangedEventArgs.cs
- ValidationError.cs
- SoapSchemaMember.cs
- TypeSystem.cs
- Util.cs
- ColorKeyFrameCollection.cs
- BuildProviderCollection.cs
- PropertyChangingEventArgs.cs
- WindowsProgressbar.cs
- CompilationRelaxations.cs
- MediaTimeline.cs
- TypeReference.cs
- BitmapCache.cs
- DateTimeValueSerializerContext.cs
- columnmapkeybuilder.cs
- Column.cs
- DocumentXmlWriter.cs
- ParenthesizePropertyNameAttribute.cs
- NetworkAddressChange.cs
- XmlAggregates.cs
- ImageMap.cs
- GPRECTF.cs
- Journal.cs
- ColumnResizeUndoUnit.cs
- ImageAutomationPeer.cs
- CodeTypeReference.cs
- Compiler.cs
- Version.cs
- GifBitmapEncoder.cs
- DataViewSettingCollection.cs
- CompilerLocalReference.cs
- PersonalizableAttribute.cs
- MultipartContentParser.cs
- MasterPageCodeDomTreeGenerator.cs
- OracleBinary.cs
- CodeIterationStatement.cs
- DiagnosticTrace.cs
- WmpBitmapEncoder.cs
- DllNotFoundException.cs
- TreeView.cs
- NativeMethods.cs
- KeyFrames.cs
- bindurihelper.cs
- TextDocumentView.cs
- XmlSchemaSimpleTypeRestriction.cs
- HealthMonitoringSection.cs
- ReadWriteSpinLock.cs
- DataGridItemEventArgs.cs
- DesignTimeTemplateParser.cs
- AppDomain.cs
- SerializationUtilities.cs
- ImageAttributes.cs
- LateBoundBitmapDecoder.cs
- DynamicObject.cs
- _HeaderInfo.cs
- QuaternionValueSerializer.cs
- DirectionalLight.cs
- SignedInfo.cs
- ApplicationInterop.cs
- NumericUpDownAccelerationCollection.cs
- TypographyProperties.cs
- Int32Rect.cs
- log.cs
- WebPartRestoreVerb.cs
- CompositeScriptReference.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- XsdBuilder.cs
- XmlSchemaComplexContentExtension.cs
- NotSupportedException.cs
- WebBrowser.cs
- ServicePointManagerElement.cs
- X509Certificate.cs
- RubberbandSelector.cs
- RemoteHelper.cs
- Style.cs
- ValidatorCompatibilityHelper.cs
- TextMarkerSource.cs
- ChannelAcceptor.cs
- ConsoleCancelEventArgs.cs
- ProxyHwnd.cs
- DispatcherEventArgs.cs
- GorillaCodec.cs
- PropertyPathWorker.cs
- SignatureDescription.cs
- ColorInterpolationModeValidation.cs
- EndOfStreamException.cs
- ApplicationHost.cs
- AsyncPostBackErrorEventArgs.cs
- PropertyManager.cs
- DashStyle.cs
- ListViewCancelEventArgs.cs
- Partitioner.cs
- ResponseBodyWriter.cs
- DeploymentSectionCache.cs
- CommonDialog.cs
- CodeNamespaceImport.cs
- _ConnectStream.cs
- LoginView.cs