Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / EntityModel / SchemaObjectModel / ScalarType.cs / 1305376 / ScalarType.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Data.SqlTypes; using System.Diagnostics; using System.Globalization; using System.Xml; using System.Data.Metadata.Edm; namespace System.Data.EntityModel.SchemaObjectModel { ////// This is an adapter to make PrimitiveTypeKindData fit in the Schema Object Model tree /// internal sealed class ScalarType : SchemaType { internal const string DateTimeFormat = @"yyyy-MM-dd HH\:mm\:ss.fffZ"; internal const string TimeFormat = @"HH\:mm\:ss.fffffffZ"; internal const string DateTimeOffsetFormat = @"yyyy-MM-dd HH\:mm\:ss.fffffffz"; private readonly static System.Text.RegularExpressions.Regex _BinaryValueValidator = new System.Text.RegularExpressions.Regex("^0[xX][0-9a-fA-F]+$", System.Text.RegularExpressions.RegexOptions.Compiled); private readonly static System.Text.RegularExpressions.Regex _GuidValueValidator = new System.Text.RegularExpressions.Regex("[0-9a-fA-F]{8,8}(-[0-9a-fA-F]{4,4}){3,3}-[0-9a-fA-F]{12,12}", System.Text.RegularExpressions.RegexOptions.Compiled); private PrimitiveType _primitiveType = null; ////// Construct an internal (not from schema) CDM scalar type /// /// the owning schema /// the naem of the type /// the PrimitiveTypeKind of the type internal ScalarType(Schema parentElement, string typeName, PrimitiveType primitiveType) : base(parentElement) { Name = typeName; _primitiveType = primitiveType; } ////// try to parse a string /// /// the string to parse /// the value of the string ///true if the value is a valid value, false otherwise public bool TryParse(string text, out object value) { switch(_primitiveType.PrimitiveTypeKind) { case PrimitiveTypeKind.Binary: return TryParseBinary(text, out value); case PrimitiveTypeKind.Boolean: return TryParseBoolean(text, out value); case PrimitiveTypeKind.Byte: return TryParseByte(text, out value); case PrimitiveTypeKind.DateTime: return TryParseDateTime(text, out value); case PrimitiveTypeKind.Time: return TryParseTime(text, out value); case PrimitiveTypeKind.DateTimeOffset: return TryParseDateTimeOffset(text, out value); case PrimitiveTypeKind.Decimal: return TryParseDecimal(text, out value); case PrimitiveTypeKind.Double: return TryParseDouble(text, out value); case PrimitiveTypeKind.Guid: return TryParseGuid(text, out value); case PrimitiveTypeKind.Int16: return TryParseInt16(text, out value); case PrimitiveTypeKind.Int32: return TryParseInt32(text, out value); case PrimitiveTypeKind.Int64: return TryParseInt64(text, out value); case PrimitiveTypeKind.Single: return TryParseSingle(text, out value); case PrimitiveTypeKind.String: return TryParseString(text, out value); case PrimitiveTypeKind.SByte: return TryParseSByte(text, out value); default: throw EntityUtil.NotSupported(_primitiveType.FullName); } } ////// The type kind of this type. /// public PrimitiveTypeKind TypeKind { get { return _primitiveType.PrimitiveTypeKind; } } ////// Returns the PrimitiveType of the scalar type. /// public PrimitiveType Type { get { return _primitiveType; } } private static bool TryParseBoolean(string text, out object value) { Boolean temp; if (!Boolean.TryParse(text, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseByte(string text, out object value) { Byte temp; if (!Byte.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseSByte(string text, out object value) { SByte temp; if (!SByte.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseInt16(string text, out object value) { Int16 temp; if (!Int16.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseInt32(string text, out object value) { Int32 temp; if (!Int32.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseInt64(string text, out object value) { Int64 temp; if (!Int64.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseDouble(string text, out object value) { Double temp; if (!Double.TryParse(text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseDecimal(string text, out object value) { Decimal temp; if (!Decimal.TryParse(text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseDateTime(string text, out object value) { DateTime temp; if (!DateTime.TryParseExact(text, DateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out temp)) { value = null; return false; } value = temp; return true; } ////// Parses the default value for Edm Type Time based on the DateTime format "HH:mm:ss.fffffffz". /// The value is first converted to DateTime value and then converted to TimeSpan. /// /// /// ///private static bool TryParseTime(string text, out object value) { DateTime temp; if (!DateTime.TryParseExact(text, TimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out temp)) { value = null; return false; } value = new TimeSpan(temp.Ticks); return true; } private static bool TryParseDateTimeOffset(string text, out object value) { DateTimeOffset temp; if (!DateTimeOffset.TryParse(text, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseGuid(string text, out object value) { if (!_GuidValueValidator.IsMatch(text)) { value = null; return false; } value = new Guid(text); return true; } private static bool TryParseString(string text, out object value) { value = text; return true; } private static bool TryParseBinary(string text, out object value) { //value must look like 0xddddd... if (!_BinaryValueValidator.IsMatch(text)) { value = null; return false; } // strip off the 0x string binaryPart = text.Substring(2); value = ConvertToByteArray(binaryPart); return true; } internal static byte[] ConvertToByteArray(string text) { int inc = 2; int numBytes = (text.Length) / 2; // adjust for case where we have 1F7 instead of 01F7 if (text.Length % 2 == 1) { inc = 1; numBytes++; } byte[] bytes = new byte[numBytes]; for (int index = 0, iByte = 0; index < text.Length; index += inc, inc = 2, ++iByte) { bytes[iByte] = byte.Parse(text.Substring(index, inc), System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture); } return bytes; } private static bool TryParseSingle(string text, out object value) { Single temp; if (!Single.TryParse(text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.Data.SqlTypes; using System.Diagnostics; using System.Globalization; using System.Xml; using System.Data.Metadata.Edm; namespace System.Data.EntityModel.SchemaObjectModel { ////// This is an adapter to make PrimitiveTypeKindData fit in the Schema Object Model tree /// internal sealed class ScalarType : SchemaType { internal const string DateTimeFormat = @"yyyy-MM-dd HH\:mm\:ss.fffZ"; internal const string TimeFormat = @"HH\:mm\:ss.fffffffZ"; internal const string DateTimeOffsetFormat = @"yyyy-MM-dd HH\:mm\:ss.fffffffz"; private readonly static System.Text.RegularExpressions.Regex _BinaryValueValidator = new System.Text.RegularExpressions.Regex("^0[xX][0-9a-fA-F]+$", System.Text.RegularExpressions.RegexOptions.Compiled); private readonly static System.Text.RegularExpressions.Regex _GuidValueValidator = new System.Text.RegularExpressions.Regex("[0-9a-fA-F]{8,8}(-[0-9a-fA-F]{4,4}){3,3}-[0-9a-fA-F]{12,12}", System.Text.RegularExpressions.RegexOptions.Compiled); private PrimitiveType _primitiveType = null; ////// Construct an internal (not from schema) CDM scalar type /// /// the owning schema /// the naem of the type /// the PrimitiveTypeKind of the type internal ScalarType(Schema parentElement, string typeName, PrimitiveType primitiveType) : base(parentElement) { Name = typeName; _primitiveType = primitiveType; } ////// try to parse a string /// /// the string to parse /// the value of the string ///true if the value is a valid value, false otherwise public bool TryParse(string text, out object value) { switch(_primitiveType.PrimitiveTypeKind) { case PrimitiveTypeKind.Binary: return TryParseBinary(text, out value); case PrimitiveTypeKind.Boolean: return TryParseBoolean(text, out value); case PrimitiveTypeKind.Byte: return TryParseByte(text, out value); case PrimitiveTypeKind.DateTime: return TryParseDateTime(text, out value); case PrimitiveTypeKind.Time: return TryParseTime(text, out value); case PrimitiveTypeKind.DateTimeOffset: return TryParseDateTimeOffset(text, out value); case PrimitiveTypeKind.Decimal: return TryParseDecimal(text, out value); case PrimitiveTypeKind.Double: return TryParseDouble(text, out value); case PrimitiveTypeKind.Guid: return TryParseGuid(text, out value); case PrimitiveTypeKind.Int16: return TryParseInt16(text, out value); case PrimitiveTypeKind.Int32: return TryParseInt32(text, out value); case PrimitiveTypeKind.Int64: return TryParseInt64(text, out value); case PrimitiveTypeKind.Single: return TryParseSingle(text, out value); case PrimitiveTypeKind.String: return TryParseString(text, out value); case PrimitiveTypeKind.SByte: return TryParseSByte(text, out value); default: throw EntityUtil.NotSupported(_primitiveType.FullName); } } ////// The type kind of this type. /// public PrimitiveTypeKind TypeKind { get { return _primitiveType.PrimitiveTypeKind; } } ////// Returns the PrimitiveType of the scalar type. /// public PrimitiveType Type { get { return _primitiveType; } } private static bool TryParseBoolean(string text, out object value) { Boolean temp; if (!Boolean.TryParse(text, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseByte(string text, out object value) { Byte temp; if (!Byte.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseSByte(string text, out object value) { SByte temp; if (!SByte.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseInt16(string text, out object value) { Int16 temp; if (!Int16.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseInt32(string text, out object value) { Int32 temp; if (!Int32.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseInt64(string text, out object value) { Int64 temp; if (!Int64.TryParse(text, System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseDouble(string text, out object value) { Double temp; if (!Double.TryParse(text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseDecimal(string text, out object value) { Decimal temp; if (!Decimal.TryParse(text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseDateTime(string text, out object value) { DateTime temp; if (!DateTime.TryParseExact(text, DateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out temp)) { value = null; return false; } value = temp; return true; } ////// Parses the default value for Edm Type Time based on the DateTime format "HH:mm:ss.fffffffz". /// The value is first converted to DateTime value and then converted to TimeSpan. /// /// /// ///private static bool TryParseTime(string text, out object value) { DateTime temp; if (!DateTime.TryParseExact(text, TimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out temp)) { value = null; return false; } value = new TimeSpan(temp.Ticks); return true; } private static bool TryParseDateTimeOffset(string text, out object value) { DateTimeOffset temp; if (!DateTimeOffset.TryParse(text, out temp)) { value = null; return false; } value = temp; return true; } private static bool TryParseGuid(string text, out object value) { if (!_GuidValueValidator.IsMatch(text)) { value = null; return false; } value = new Guid(text); return true; } private static bool TryParseString(string text, out object value) { value = text; return true; } private static bool TryParseBinary(string text, out object value) { //value must look like 0xddddd... if (!_BinaryValueValidator.IsMatch(text)) { value = null; return false; } // strip off the 0x string binaryPart = text.Substring(2); value = ConvertToByteArray(binaryPart); return true; } internal static byte[] ConvertToByteArray(string text) { int inc = 2; int numBytes = (text.Length) / 2; // adjust for case where we have 1F7 instead of 01F7 if (text.Length % 2 == 1) { inc = 1; numBytes++; } byte[] bytes = new byte[numBytes]; for (int index = 0, iByte = 0; index < text.Length; index += inc, inc = 2, ++iByte) { bytes[iByte] = byte.Parse(text.Substring(index, inc), System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture); } return bytes; } private static bool TryParseSingle(string text, out object value) { Single temp; if (!Single.TryParse(text, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out temp)) { value = null; return false; } value = temp; return true; } } } // 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
- util.cs
- InvocationExpression.cs
- TypeNameParser.cs
- MonthChangedEventArgs.cs
- HttpHostedTransportConfiguration.cs
- XDRSchema.cs
- DetailsViewUpdateEventArgs.cs
- DataPagerCommandEventArgs.cs
- DesignerActionList.cs
- LayoutEngine.cs
- ApplicationException.cs
- CookielessData.cs
- PartitionedStreamMerger.cs
- MemberInfoSerializationHolder.cs
- XmlRawWriterWrapper.cs
- DependencyObjectType.cs
- MembershipUser.cs
- OpCopier.cs
- DbReferenceCollection.cs
- RawStylusActions.cs
- DispatcherObject.cs
- DataServiceContext.cs
- DesignColumnCollection.cs
- Process.cs
- Shape.cs
- CellParagraph.cs
- TypefaceMetricsCache.cs
- QuaternionAnimationBase.cs
- UrlParameterWriter.cs
- TextViewBase.cs
- ApplicationDirectoryMembershipCondition.cs
- PasswordBoxAutomationPeer.cs
- AttachedPropertyDescriptor.cs
- GenerateScriptTypeAttribute.cs
- XmlFormatExtensionAttribute.cs
- Camera.cs
- CursorInteropHelper.cs
- EditingCoordinator.cs
- HwndKeyboardInputProvider.cs
- CodeTypeDeclaration.cs
- ReadOnlyTernaryTree.cs
- DataSetViewSchema.cs
- BinaryParser.cs
- DataMember.cs
- DataGridViewCellFormattingEventArgs.cs
- TrackingConditionCollection.cs
- ScriptResourceDefinition.cs
- WindowsFormsDesignerOptionService.cs
- SerialPinChanges.cs
- WebPartZone.cs
- ConnectionPoolManager.cs
- RefreshEventArgs.cs
- RequiredAttributeAttribute.cs
- SlotInfo.cs
- TlsSspiNegotiation.cs
- BookmarkScope.cs
- MessageQueueException.cs
- WindowProviderWrapper.cs
- Span.cs
- Bidi.cs
- Enlistment.cs
- MultiBinding.cs
- OperationInfoBase.cs
- TaiwanLunisolarCalendar.cs
- MILUtilities.cs
- ChangeBlockUndoRecord.cs
- SessionSwitchEventArgs.cs
- AutoGeneratedFieldProperties.cs
- WebEventCodes.cs
- SqlTriggerAttribute.cs
- SkinBuilder.cs
- GlyphingCache.cs
- SqlDataSourceSelectingEventArgs.cs
- WindowProviderWrapper.cs
- Function.cs
- IisTraceListener.cs
- FixedSOMTable.cs
- PropertyDescriptorCollection.cs
- CatalogPartChrome.cs
- SourceFileBuildProvider.cs
- ReferenceEqualityComparer.cs
- ListItem.cs
- FieldBuilder.cs
- StringFreezingAttribute.cs
- SettingsProviderCollection.cs
- PhoneCall.cs
- ToolBar.cs
- BinaryUtilClasses.cs
- WebEvents.cs
- Model3D.cs
- PolicyStatement.cs
- DataGridViewSelectedCellCollection.cs
- CodePageUtils.cs
- SamlAuthenticationStatement.cs
- LineInfo.cs
- DataGridViewEditingControlShowingEventArgs.cs
- ReflectEventDescriptor.cs
- Wizard.cs
- BindingEntityInfo.cs
- SqlConnectionStringBuilder.cs