Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Common / DbCommandDefinition.cs / 1 / DbCommandDefinition.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //----------------------------------------------------------------------------- using System.Diagnostics; using System.Data.Metadata.Edm; namespace System.Data.Common { ////// A prepared command definition, can be cached and reused to avoid /// repreparing a command. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db")] public class DbCommandDefinition { private readonly ICloneable _prototype; ////// Internal factory method to create the default Command Definition object /// based on a prototype command. The prototype command is cloned /// before the protected constructor is invoked /// /// prototype DbCommand ///the DbCommandDefinition internal static DbCommandDefinition CreateCommandDefinition(DbCommand prototype) { EntityUtil.CheckArgumentNull(prototype, "prototype"); ICloneable cloneablePrototype = prototype as ICloneable; if (null == cloneablePrototype) { throw EntityUtil.CannotCloneStoreProvider(); } DbCommand clonedPrototype = (DbCommand)(cloneablePrototype.Clone()); return new DbCommandDefinition(clonedPrototype); } ////// Protected constructor; the command is assumed to be a prototype /// that will be cloned on CreateCommand, and the cloned command will be executed. /// protected DbCommandDefinition(DbCommand prototype) { EntityUtil.CheckArgumentNull(prototype, "prototype"); _prototype = prototype as ICloneable; if (null == _prototype) { throw EntityUtil.CannotCloneStoreProvider(); } } ////// Constructor overload for subclasses to use /// protected DbCommandDefinition() { } ////// Create a DbCommand object from the definition, that can be executed. /// ///public virtual DbCommand CreateCommand() { return (DbCommand)(_prototype.Clone()); } internal static void PopulateParameterFromTypeUsage(DbParameter parameter, TypeUsage type, bool isOutParam) { EntityUtil.CheckArgumentNull(parameter, "parameter"); EntityUtil.CheckArgumentNull(type, "type"); // parameter.IsNullable - from the NullableConstraintAttribute value parameter.IsNullable = TypeSemantics.IsNullable(type); // parameter.ParameterName - set by the caller; // parameter.SourceColumn - not applicable until we have a data adapter; // parameter.SourceColumnNullMapping - not applicable until we have a data adapter; // parameter.SourceVersion - not applicable until we have a data adapter; // parameter.Value - left unset; // parameter.DbType - determined by the TypeMapping; // parameter.Precision - from the TypeMapping; // parameter.Scale - from the TypeMapping; // parameter.Size - from the TypeMapping; Debug.Assert(null != type, "no type mapping?"); if (TypeSemantics.IsPrimitiveType(type, Metadata.Edm.PrimitiveTypeKind.Binary)) { PopulateBinaryParameter(parameter, type, DbType.Binary, isOutParam); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Boolean)) { parameter.DbType = DbType.Boolean; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Byte)) { parameter.DbType = DbType.Byte; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.DateTime)) { PopulateDateTimeParameter(parameter, type, DbType.DateTime); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Time)) { PopulateDateTimeParameter(parameter, type, DbType.Time); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.DateTimeOffset)) { PopulateDateTimeParameter(parameter, type, DbType.DateTimeOffset); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Decimal)) { PopulateDecimalParameter(parameter, type, DbType.Decimal); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Double)) { parameter.DbType = DbType.Double; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Guid)) { parameter.DbType = DbType.Guid; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Single)) { parameter.DbType = DbType.Single; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.SByte)) { parameter.DbType = DbType.SByte; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Int16)) { parameter.DbType = DbType.Int16; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Int32)) { parameter.DbType = DbType.Int32; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Int64)) { parameter.DbType = DbType.Int64; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.String)) { PopulateStringParameter(parameter, type, isOutParam); } } private static void PopulateBinaryParameter(DbParameter parameter, TypeUsage type, DbType dbType, bool isOutParam) { parameter.DbType = dbType; // For each facet, set the facet value only if we have it, note that it's possible to not have // it in the case the facet value is null SetParameterSize(parameter, type, isOutParam); } private static void PopulateDecimalParameter (DbParameter parameter, TypeUsage type, DbType dbType) { parameter.DbType = dbType; IDbDataParameter dataParameter = (IDbDataParameter)parameter; // For each facet, set the facet value only if we have it, note that it's possible to not have // it in the case the facet value is null byte precision; byte scale; if (TypeHelpers.TryGetPrecision(type, out precision)) { dataParameter.Precision = precision; } if (TypeHelpers.TryGetScale(type, out scale)) { dataParameter.Scale = scale; } } private static void PopulateDateTimeParameter(DbParameter parameter, TypeUsage type, DbType dbType) { parameter.DbType = dbType; IDbDataParameter dataParameter = (IDbDataParameter)parameter; // For each facet, set the facet value only if we have it, note that it's possible to not have // it in the case the facet value is null byte precision; if (TypeHelpers.TryGetPrecision(type, out precision)) { dataParameter.Precision = precision; } } private static void PopulateStringParameter(DbParameter parameter, TypeUsage type, bool isOutParam) { // For each facet, set the facet value only if we have it, note that it's possible to not have // it in the case the facet value is null bool unicode = true; bool fixedLength = false; if (!TypeHelpers.TryGetIsFixedLength(type, out fixedLength)) { // If we can't get the fixed length facet value, then default to fixed length = false fixedLength = false; } if (!TypeHelpers.TryGetIsUnicode(type, out unicode)) { // If we can't get the unicode facet value, then default to unicode = true unicode = true; } if (fixedLength) { parameter.DbType = (unicode ? DbType.StringFixedLength : DbType.AnsiStringFixedLength); } else { parameter.DbType = (unicode ? DbType.String : DbType.AnsiString); } SetParameterSize(parameter, type, isOutParam); } private static void SetParameterSize(DbParameter parameter, TypeUsage type, bool isOutParam) { // only set the size if the parameter has a specific size value. Facet maxLengthFacet; if (type.Facets.TryGetValue(DbProviderManifest.MaxLengthFacetName, true, out maxLengthFacet) && maxLengthFacet.Value != null) { // only set size if there is a specific size if (!Helper.IsUnboundedFacetValue(maxLengthFacet)) { parameter.Size = (int)maxLengthFacet.Value; } else if (isOutParam) { // if it is store procedure parameter and it is unbounded set the size to max parameter.Size = Int32.MaxValue; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //----------------------------------------------------------------------------- using System.Diagnostics; using System.Data.Metadata.Edm; namespace System.Data.Common { ////// A prepared command definition, can be cached and reused to avoid /// repreparing a command. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db")] public class DbCommandDefinition { private readonly ICloneable _prototype; ////// Internal factory method to create the default Command Definition object /// based on a prototype command. The prototype command is cloned /// before the protected constructor is invoked /// /// prototype DbCommand ///the DbCommandDefinition internal static DbCommandDefinition CreateCommandDefinition(DbCommand prototype) { EntityUtil.CheckArgumentNull(prototype, "prototype"); ICloneable cloneablePrototype = prototype as ICloneable; if (null == cloneablePrototype) { throw EntityUtil.CannotCloneStoreProvider(); } DbCommand clonedPrototype = (DbCommand)(cloneablePrototype.Clone()); return new DbCommandDefinition(clonedPrototype); } ////// Protected constructor; the command is assumed to be a prototype /// that will be cloned on CreateCommand, and the cloned command will be executed. /// protected DbCommandDefinition(DbCommand prototype) { EntityUtil.CheckArgumentNull(prototype, "prototype"); _prototype = prototype as ICloneable; if (null == _prototype) { throw EntityUtil.CannotCloneStoreProvider(); } } ////// Constructor overload for subclasses to use /// protected DbCommandDefinition() { } ////// Create a DbCommand object from the definition, that can be executed. /// ///public virtual DbCommand CreateCommand() { return (DbCommand)(_prototype.Clone()); } internal static void PopulateParameterFromTypeUsage(DbParameter parameter, TypeUsage type, bool isOutParam) { EntityUtil.CheckArgumentNull(parameter, "parameter"); EntityUtil.CheckArgumentNull(type, "type"); // parameter.IsNullable - from the NullableConstraintAttribute value parameter.IsNullable = TypeSemantics.IsNullable(type); // parameter.ParameterName - set by the caller; // parameter.SourceColumn - not applicable until we have a data adapter; // parameter.SourceColumnNullMapping - not applicable until we have a data adapter; // parameter.SourceVersion - not applicable until we have a data adapter; // parameter.Value - left unset; // parameter.DbType - determined by the TypeMapping; // parameter.Precision - from the TypeMapping; // parameter.Scale - from the TypeMapping; // parameter.Size - from the TypeMapping; Debug.Assert(null != type, "no type mapping?"); if (TypeSemantics.IsPrimitiveType(type, Metadata.Edm.PrimitiveTypeKind.Binary)) { PopulateBinaryParameter(parameter, type, DbType.Binary, isOutParam); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Boolean)) { parameter.DbType = DbType.Boolean; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Byte)) { parameter.DbType = DbType.Byte; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.DateTime)) { PopulateDateTimeParameter(parameter, type, DbType.DateTime); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Time)) { PopulateDateTimeParameter(parameter, type, DbType.Time); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.DateTimeOffset)) { PopulateDateTimeParameter(parameter, type, DbType.DateTimeOffset); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Decimal)) { PopulateDecimalParameter(parameter, type, DbType.Decimal); } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Double)) { parameter.DbType = DbType.Double; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Guid)) { parameter.DbType = DbType.Guid; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Single)) { parameter.DbType = DbType.Single; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.SByte)) { parameter.DbType = DbType.SByte; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Int16)) { parameter.DbType = DbType.Int16; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Int32)) { parameter.DbType = DbType.Int32; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.Int64)) { parameter.DbType = DbType.Int64; } else if (TypeSemantics.IsPrimitiveType(type, PrimitiveTypeKind.String)) { PopulateStringParameter(parameter, type, isOutParam); } } private static void PopulateBinaryParameter(DbParameter parameter, TypeUsage type, DbType dbType, bool isOutParam) { parameter.DbType = dbType; // For each facet, set the facet value only if we have it, note that it's possible to not have // it in the case the facet value is null SetParameterSize(parameter, type, isOutParam); } private static void PopulateDecimalParameter (DbParameter parameter, TypeUsage type, DbType dbType) { parameter.DbType = dbType; IDbDataParameter dataParameter = (IDbDataParameter)parameter; // For each facet, set the facet value only if we have it, note that it's possible to not have // it in the case the facet value is null byte precision; byte scale; if (TypeHelpers.TryGetPrecision(type, out precision)) { dataParameter.Precision = precision; } if (TypeHelpers.TryGetScale(type, out scale)) { dataParameter.Scale = scale; } } private static void PopulateDateTimeParameter(DbParameter parameter, TypeUsage type, DbType dbType) { parameter.DbType = dbType; IDbDataParameter dataParameter = (IDbDataParameter)parameter; // For each facet, set the facet value only if we have it, note that it's possible to not have // it in the case the facet value is null byte precision; if (TypeHelpers.TryGetPrecision(type, out precision)) { dataParameter.Precision = precision; } } private static void PopulateStringParameter(DbParameter parameter, TypeUsage type, bool isOutParam) { // For each facet, set the facet value only if we have it, note that it's possible to not have // it in the case the facet value is null bool unicode = true; bool fixedLength = false; if (!TypeHelpers.TryGetIsFixedLength(type, out fixedLength)) { // If we can't get the fixed length facet value, then default to fixed length = false fixedLength = false; } if (!TypeHelpers.TryGetIsUnicode(type, out unicode)) { // If we can't get the unicode facet value, then default to unicode = true unicode = true; } if (fixedLength) { parameter.DbType = (unicode ? DbType.StringFixedLength : DbType.AnsiStringFixedLength); } else { parameter.DbType = (unicode ? DbType.String : DbType.AnsiString); } SetParameterSize(parameter, type, isOutParam); } private static void SetParameterSize(DbParameter parameter, TypeUsage type, bool isOutParam) { // only set the size if the parameter has a specific size value. Facet maxLengthFacet; if (type.Facets.TryGetValue(DbProviderManifest.MaxLengthFacetName, true, out maxLengthFacet) && maxLengthFacet.Value != null) { // only set size if there is a specific size if (!Helper.IsUnboundedFacetValue(maxLengthFacet)) { parameter.Size = (int)maxLengthFacet.Value; } else if (isOutParam) { // if it is store procedure parameter and it is unbounded set the size to max parameter.Size = Int32.MaxValue; } } } } } // 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
- ByteFacetDescriptionElement.cs
- XmlUTF8TextWriter.cs
- ResXResourceSet.cs
- CellCreator.cs
- AmbiguousMatchException.cs
- EntityException.cs
- PointAnimationBase.cs
- TypeSystem.cs
- Misc.cs
- SHA256Managed.cs
- OverflowException.cs
- SHA1Managed.cs
- EntityDataSourceColumn.cs
- ListDictionaryInternal.cs
- ForwardPositionQuery.cs
- DrawListViewSubItemEventArgs.cs
- TableItemStyle.cs
- FamilyCollection.cs
- FlatButtonAppearance.cs
- StatusInfoItem.cs
- DropShadowEffect.cs
- CqlLexerHelpers.cs
- EvidenceBase.cs
- SQLGuidStorage.cs
- documentsequencetextcontainer.cs
- KeyedCollection.cs
- BitmapDecoder.cs
- SocketElement.cs
- ReservationNotFoundException.cs
- LayoutManager.cs
- XamlReaderConstants.cs
- KeyProperty.cs
- GeometryModel3D.cs
- RectangleHotSpot.cs
- MeasureData.cs
- VectorValueSerializer.cs
- ColorAnimationUsingKeyFrames.cs
- BuildProviderAppliesToAttribute.cs
- FormsIdentity.cs
- CustomGrammar.cs
- OutputCacheProfileCollection.cs
- TraceListener.cs
- NativeWindow.cs
- UrlPropertyAttribute.cs
- InputScopeNameConverter.cs
- RowType.cs
- MultiAsyncResult.cs
- Int32Converter.cs
- PaintEvent.cs
- ProvidersHelper.cs
- UpnEndpointIdentityExtension.cs
- RevocationPoint.cs
- PlainXmlWriter.cs
- XmlIlTypeHelper.cs
- Triangle.cs
- SyndicationCategory.cs
- XPathNavigatorKeyComparer.cs
- Pointer.cs
- NumericUpDown.cs
- ScrollContentPresenter.cs
- FacetDescriptionElement.cs
- ChtmlTextWriter.cs
- SafeCryptoHandles.cs
- DataGridViewCellParsingEventArgs.cs
- RealizedColumnsBlock.cs
- DriveInfo.cs
- PrePrepareMethodAttribute.cs
- SmiSettersStream.cs
- X509CertificateEndpointIdentity.cs
- MachineKeyConverter.cs
- XmlAttributeOverrides.cs
- SecurityElement.cs
- XmlDataFileEditor.cs
- LogReservationCollection.cs
- embossbitmapeffect.cs
- DataColumnMappingCollection.cs
- DecimalAnimationBase.cs
- FollowerQueueCreator.cs
- exports.cs
- SizeFConverter.cs
- DateTimePickerDesigner.cs
- SQLInt16.cs
- QueuePropertyVariants.cs
- IntellisenseTextBox.cs
- CapabilitiesRule.cs
- contentDescriptor.cs
- SoapFault.cs
- IPipelineRuntime.cs
- HtmlButton.cs
- InputMethodStateTypeInfo.cs
- InnerItemCollectionView.cs
- ProxyFragment.cs
- LinqDataSourceDeleteEventArgs.cs
- XPathExpr.cs
- ActivityDesignerResources.cs
- HttpClientCertificate.cs
- SingleStorage.cs
- SignatureResourcePool.cs
- UpdatePanelControlTrigger.cs
- StreamReader.cs