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
- TabControl.cs
- XPathPatternParser.cs
- SectionXmlInfo.cs
- IncrementalCompileAnalyzer.cs
- Rotation3D.cs
- AnnotationComponentChooser.cs
- GridViewPageEventArgs.cs
- AuthStoreRoleProvider.cs
- AndMessageFilter.cs
- StateBag.cs
- ControlPersister.cs
- ObjectHelper.cs
- isolationinterop.cs
- TimeSpanSecondsConverter.cs
- ContractUtils.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- FieldDescriptor.cs
- LinkedResourceCollection.cs
- XmlTextReader.cs
- _Win32.cs
- GroupedContextMenuStrip.cs
- DbParameterHelper.cs
- RowsCopiedEventArgs.cs
- XmlMemberMapping.cs
- FilterElement.cs
- GeneralTransform3D.cs
- WebPartTransformer.cs
- CorrelationActionMessageFilter.cs
- VirtualPathProvider.cs
- TypeConverterHelper.cs
- ApplicationServiceManager.cs
- ComNativeDescriptor.cs
- WindowsUpDown.cs
- DbCommandDefinition.cs
- CharacterMetricsDictionary.cs
- DbXmlEnabledProviderManifest.cs
- RequestCacheManager.cs
- DecimalAnimationUsingKeyFrames.cs
- EmbossBitmapEffect.cs
- Normalization.cs
- ScrollPattern.cs
- BitmapInitialize.cs
- SiteMapNodeItemEventArgs.cs
- GroupJoinQueryOperator.cs
- ZoneButton.cs
- CategoryState.cs
- NegotiationTokenAuthenticator.cs
- FilePrompt.cs
- XamlSerializer.cs
- ResourceAssociationTypeEnd.cs
- CategoryAttribute.cs
- FirstMatchCodeGroup.cs
- DesignerActionListCollection.cs
- OrderedDictionaryStateHelper.cs
- ErrorTableItemStyle.cs
- PackageDigitalSignature.cs
- XmlILModule.cs
- DrawListViewSubItemEventArgs.cs
- UnsafeNativeMethods.cs
- WebServiceBindingAttribute.cs
- ConfigXmlCDataSection.cs
- WebPartRestoreVerb.cs
- SqlNotificationRequest.cs
- XPathNavigatorKeyComparer.cs
- LogAppendAsyncResult.cs
- RoleManagerSection.cs
- NamedObject.cs
- Size3D.cs
- FixedPageAutomationPeer.cs
- UpdateCompiler.cs
- DataGridViewCellStateChangedEventArgs.cs
- HwndHost.cs
- FormatStringEditor.cs
- DataGridCheckBoxColumn.cs
- Synchronization.cs
- CodeVariableDeclarationStatement.cs
- Sql8ExpressionRewriter.cs
- ScriptDescriptor.cs
- UserPreferenceChangedEventArgs.cs
- MarginCollapsingState.cs
- ObjectTag.cs
- NavigationWindow.cs
- BitmapEffectDrawingContextWalker.cs
- XmlUtil.cs
- UnsafeNativeMethodsMilCoreApi.cs
- DesigntimeLicenseContextSerializer.cs
- panel.cs
- RepeatButtonAutomationPeer.cs
- RelationshipType.cs
- DataGridPreparingCellForEditEventArgs.cs
- Int32RectConverter.cs
- SiteMapNode.cs
- SqlNotificationRequest.cs
- DateTimeParse.cs
- PolicyUnit.cs
- AppDomainAttributes.cs
- MDIWindowDialog.cs
- DataGridToolTip.cs
- IOThreadScheduler.cs
- PageClientProxyGenerator.cs