Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlObjectSerializerWriteContextComplex.cs
- SecurityKeyIdentifierClause.cs
- NotificationContext.cs
- UICuesEvent.cs
- SiteIdentityPermission.cs
- TableSectionStyle.cs
- CallContext.cs
- TrackBarDesigner.cs
- SchemaReference.cs
- TextLine.cs
- DbLambda.cs
- AccessViolationException.cs
- SqlExpressionNullability.cs
- PageThemeCodeDomTreeGenerator.cs
- JavaScriptObjectDeserializer.cs
- ValueHandle.cs
- ConnectionPool.cs
- SequentialActivityDesigner.cs
- ZipIOModeEnforcingStream.cs
- ping.cs
- TagElement.cs
- SqlFacetAttribute.cs
- FrameworkContentElementAutomationPeer.cs
- Matrix3DValueSerializer.cs
- PersonalizationStateInfo.cs
- PrimitiveCodeDomSerializer.cs
- AnnotationComponentManager.cs
- Brush.cs
- ProxyWebPart.cs
- ArrayHelper.cs
- BezierSegment.cs
- WeakEventManager.cs
- ListBase.cs
- DesignerDataTable.cs
- MimeAnyImporter.cs
- DataBoundLiteralControl.cs
- GridViewCancelEditEventArgs.cs
- EventWaitHandleSecurity.cs
- AnimationTimeline.cs
- _UncName.cs
- NetworkInformationException.cs
- ExpressionValueEditor.cs
- CalendarTable.cs
- RightsManagementPermission.cs
- DocumentPageView.cs
- CompiledQueryCacheKey.cs
- ObjectDataSourceMethodEventArgs.cs
- IImplicitResourceProvider.cs
- RectAnimationBase.cs
- Resources.Designer.cs
- ResourcesGenerator.cs
- UpdateRecord.cs
- Size.cs
- MatrixTransform.cs
- Substitution.cs
- DataViewSettingCollection.cs
- DeferredRunTextReference.cs
- SqlGenericUtil.cs
- HandlerWithFactory.cs
- DataGridViewSelectedColumnCollection.cs
- ListItem.cs
- TraceInternal.cs
- CaretElement.cs
- MobileUserControlDesigner.cs
- CodeMemberMethod.cs
- nulltextcontainer.cs
- AssemblyResourceLoader.cs
- EntityRecordInfo.cs
- InputMethod.cs
- NumberSubstitution.cs
- AndCondition.cs
- TreeSet.cs
- TypeLibConverter.cs
- StrokeRenderer.cs
- ServicePointManagerElement.cs
- TextEffect.cs
- TextElementEnumerator.cs
- SqlDataSourceEnumerator.cs
- PersonalizationState.cs
- EllipseGeometry.cs
- InvariantComparer.cs
- FormatException.cs
- TraceUtility.cs
- CodeNamespaceCollection.cs
- _emptywebproxy.cs
- SafeNativeMethods.cs
- BuildDependencySet.cs
- TypedReference.cs
- ActiveDocumentEvent.cs
- SafeCertificateStore.cs
- ImageMapEventArgs.cs
- BaseParagraph.cs
- DataGridAddNewRow.cs
- ToggleButtonAutomationPeer.cs
- EditorPart.cs
- PeerNameRecordCollection.cs
- BaseParagraph.cs
- CommentEmitter.cs
- SpellerError.cs
- _ProxyChain.cs