Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / System / Data / SqlClient / SqlUdtInfo.cs / 1305376 / SqlUdtInfo.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All Rights Reserved.
// Information Contained Herein is Proprietary and Confidential.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.SqlClient {
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Sql;
using System.Data.SqlTypes;
using System.Diagnostics;
using System.Text;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection.Emit;
using System.Security.Permissions;
using Microsoft.SqlServer.Server;
internal class SqlUdtInfo {
internal readonly Microsoft.SqlServer.Server.Format SerializationFormat;
internal readonly bool IsByteOrdered;
internal readonly bool IsFixedLength;
internal readonly int MaxByteSize;
internal readonly string Name;
internal readonly string ValidationMethodName;
private SqlUdtInfo(Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute attr) {
SerializationFormat = (Microsoft.SqlServer.Server.Format)attr.Format;
IsByteOrdered = attr.IsByteOrdered;
IsFixedLength = attr.IsFixedLength;
MaxByteSize = attr.MaxByteSize;
Name = attr.Name;
ValidationMethodName= attr.ValidationMethodName;
}
internal static SqlUdtInfo GetFromType(Type target) {
SqlUdtInfo udtAttr = TryGetFromType(target);
if (udtAttr == null) {
throw InvalidUdtException.Create(target, Res.SqlUdtReason_NoUdtAttribute);
}
return udtAttr;
}
// VSTFDEVDIV 479671: Type.GetCustomAttributes is an time-expensive call.
// Improve UDT serialization performance by caching the resulted UDT type information using type-safe dictionary.
// Use a per-thread cache, so we do not need to synchronize access to it
[ThreadStatic]
private static Dictionary m_types2UdtInfo;
internal static SqlUdtInfo TryGetFromType(Type target) {
if (m_types2UdtInfo == null)
m_types2UdtInfo = new Dictionary();
SqlUdtInfo udtAttr = null;
if (!m_types2UdtInfo.TryGetValue(target, out udtAttr)) {
// query SqlUserDefinedTypeAttribute first time and cache the result
object[] attr = target.GetCustomAttributes(typeof(Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute), false);
if (attr != null && attr.Length == 1) {
udtAttr = new SqlUdtInfo((Microsoft.SqlServer.Server.SqlUserDefinedTypeAttribute)attr[0]);
}
m_types2UdtInfo.Add(target, udtAttr);
}
return udtAttr;
}
}
}
// 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
- ComponentDesigner.cs
- JpegBitmapDecoder.cs
- DistributedTransactionPermission.cs
- Vertex.cs
- Drawing.cs
- _LoggingObject.cs
- ConnectionOrientedTransportChannelFactory.cs
- DataGridViewCell.cs
- HeaderCollection.cs
- ConfigurationPropertyAttribute.cs
- SynchronousChannelMergeEnumerator.cs
- AttributeCollection.cs
- KnownColorTable.cs
- XmlSchemaChoice.cs
- FlowDocumentReader.cs
- StringComparer.cs
- DbCommandDefinition.cs
- EnumConverter.cs
- DataGridItem.cs
- WorkflowApplicationIdleEventArgs.cs
- InputScope.cs
- HttpCacheParams.cs
- CharKeyFrameCollection.cs
- XmlKeywords.cs
- DataServiceConfiguration.cs
- DateTimeOffset.cs
- ReadOnlyHierarchicalDataSourceView.cs
- TypeRestriction.cs
- DataSourceDescriptorCollection.cs
- ToolStripDropDownClosingEventArgs.cs
- RuleRef.cs
- Vars.cs
- ToolStripPanel.cs
- EdmFunction.cs
- BinaryObjectReader.cs
- TypeUsage.cs
- PersonalizationStateInfo.cs
- ExeConfigurationFileMap.cs
- Delegate.cs
- CoTaskMemUnicodeSafeHandle.cs
- XmlAttributes.cs
- ToolStripDropDownButton.cs
- UpdateCommand.cs
- CompilerErrorCollection.cs
- DataGridDefaultColumnWidthTypeConverter.cs
- Timer.cs
- TextEffectResolver.cs
- ClockController.cs
- TextTreeTextElementNode.cs
- DoubleLinkList.cs
- FileAuthorizationModule.cs
- XmlTextEncoder.cs
- Header.cs
- InstallHelper.cs
- DisableDpiAwarenessAttribute.cs
- ConnectionManagementElement.cs
- CheckPair.cs
- CommandArguments.cs
- InkSerializer.cs
- RouteUrlExpressionBuilder.cs
- CodeGen.cs
- Canvas.cs
- DataMisalignedException.cs
- DispatcherExceptionFilterEventArgs.cs
- FlagsAttribute.cs
- HandlerMappingMemo.cs
- TextEffect.cs
- ButtonBase.cs
- ListItemParagraph.cs
- Button.cs
- SessionEndingCancelEventArgs.cs
- WhitespaceRuleReader.cs
- PenLineJoinValidation.cs
- QilInvokeEarlyBound.cs
- TextFormatterContext.cs
- NumericUpDownAccelerationCollection.cs
- FixedDocumentPaginator.cs
- DataRelationPropertyDescriptor.cs
- TitleStyle.cs
- ContractComponent.cs
- assemblycache.cs
- Compiler.cs
- TextMarkerSource.cs
- SqlDependency.cs
- PageEventArgs.cs
- EvidenceBase.cs
- SymmetricAlgorithm.cs
- StringComparer.cs
- RectangleGeometry.cs
- MediaEntryAttribute.cs
- OleDbParameterCollection.cs
- RegexMatch.cs
- XmlAttributes.cs
- Color.cs
- PersonalizationState.cs
- NamespaceInfo.cs
- ImportCatalogPart.cs
- WebSysDescriptionAttribute.cs
- DependencyPropertyHelper.cs
- BuildProvider.cs