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
- TimeoutException.cs
- Attributes.cs
- Int32CollectionConverter.cs
- PropertyIDSet.cs
- LingerOption.cs
- ConnectionsZoneAutoFormat.cs
- DataView.cs
- ResolvedKeyFrameEntry.cs
- DataSourceView.cs
- XmlNodeChangedEventManager.cs
- WorkflowServiceBuildProvider.cs
- QilSortKey.cs
- SchemeSettingElementCollection.cs
- WindowsFormsEditorServiceHelper.cs
- DataMisalignedException.cs
- RequestDescription.cs
- RawStylusInputCustomDataList.cs
- GeneralTransform3DGroup.cs
- EventHandlerList.cs
- DisplayMemberTemplateSelector.cs
- TableColumnCollectionInternal.cs
- NumberFormatter.cs
- WorkflowOperationAsyncResult.cs
- UnmanagedMemoryStream.cs
- CardSpaceSelector.cs
- EntityDataSourceColumn.cs
- DependencyPropertyKind.cs
- IFlowDocumentViewer.cs
- MessageBox.cs
- DomainUpDown.cs
- SapiAttributeParser.cs
- TemplateBindingExpression.cs
- SectionRecord.cs
- PostBackTrigger.cs
- UnsafeNativeMethods.cs
- ClientCultureInfo.cs
- CompilerTypeWithParams.cs
- SelfSignedCertificate.cs
- PersonalizableAttribute.cs
- ButtonBaseAutomationPeer.cs
- WpfWebRequestHelper.cs
- LassoHelper.cs
- _ConnectionGroup.cs
- altserialization.cs
- EntityProxyTypeInfo.cs
- DataGridBoolColumn.cs
- BaseHashHelper.cs
- CompressedStack.cs
- XamlFigureLengthSerializer.cs
- PersonalizationState.cs
- TimerElapsedEvenArgs.cs
- BufferedGraphics.cs
- ConstraintConverter.cs
- XmlNullResolver.cs
- RemotingServices.cs
- HashCodeCombiner.cs
- BreadCrumbTextConverter.cs
- MessageDecoder.cs
- CorrelationManager.cs
- TagNameToTypeMapper.cs
- ConfigsHelper.cs
- X509SubjectKeyIdentifierClause.cs
- JsonClassDataContract.cs
- TargetParameterCountException.cs
- InfoCardProofToken.cs
- SQLConvert.cs
- RawStylusInputCustomData.cs
- OpacityConverter.cs
- ApplicationManager.cs
- RefType.cs
- COMException.cs
- EntityDataSourceMemberPath.cs
- MetadataReference.cs
- BuildProviderInstallComponent.cs
- SqlUDTStorage.cs
- DbMetaDataFactory.cs
- Parser.cs
- ReceiveActivityValidator.cs
- Point3D.cs
- State.cs
- QuaternionRotation3D.cs
- AdditionalEntityFunctions.cs
- ParserExtension.cs
- ToolStripGripRenderEventArgs.cs
- WebHttpBindingCollectionElement.cs
- IResourceProvider.cs
- DateTimeEditor.cs
- ChangesetResponse.cs
- Rijndael.cs
- AlignmentXValidation.cs
- SqlAggregateChecker.cs
- TaskDesigner.cs
- ClientBuildManagerCallback.cs
- DecryptRequest.cs
- WebUtil.cs
- ListBoxItemAutomationPeer.cs
- MarshalDirectiveException.cs
- SessionStateUtil.cs
- SqlMetaData.cs
- Normalization.cs