Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities.DurableInstancing / System / Activities / DurableInstancing / StoreUtilities.cs / 1305376 / StoreUtilities.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.DurableInstancing { using System.Collections.Generic; using System.Data.SqlClient; using System.Globalization; using System.Runtime; using System.Runtime.DurableInstancing; using System.Text; using System.Xml.Linq; static class StoreUtilities { public static Exception CheckRemainingResultSetForErrors(XName commandName, SqlDataReader reader) { Exception returnException = null; do { returnException = StoreUtilities.GetNextResultSet(commandName, reader); } while (returnException == null && reader.NextResult()); return returnException; } public static Exception CheckResult(XName commandName, SqlDataReader reader) { Exception returnValue = null; CommandResult result = (CommandResult) reader.GetInt32(0); if (result != CommandResult.Success) { returnValue = StoreUtilities.GetError(commandName, result, reader); } return returnValue; } public static SqlConnection CreateConnection(string connectionString) { SqlConnection connection = new SqlConnection(connectionString); connection.Open(); return connection; } public static Exception GetError(XName commandName, CommandResult result, SqlDataReader reader) { Exception returnValue = null; if (result != CommandResult.Success) { switch (result) { case CommandResult.InstanceAlreadyExists: returnValue = new InstanceCollisionException(commandName, reader.GetGuid(1)); break; case CommandResult.InstanceLockNotAcquired: returnValue = new InstanceLockedException(commandName, reader.GetGuid(1), reader.GetGuid(2), ReadLockOwnerMetadata(reader)); break; case CommandResult.InstanceNotFound: returnValue = new InstanceNotReadyException(commandName, reader.GetGuid(1)); break; case CommandResult.KeyAlreadyExists: returnValue = new InstanceKeyCollisionException(commandName, Guid.Empty, new InstanceKey(reader.GetGuid(1)), Guid.Empty); break; case CommandResult.KeyNotFound: returnValue = new InstanceKeyNotReadyException(commandName, new InstanceKey(reader.GetGuid(1))); break; case CommandResult.InstanceLockLost: returnValue = new InstanceLockLostException(commandName, reader.GetGuid(1)); break; case CommandResult.InstanceCompleted: returnValue = new InstanceCompleteException(commandName, reader.GetGuid(1)); break; case CommandResult.KeyDisassociated: returnValue = new InstanceKeyCompleteException(commandName, new InstanceKey(reader.GetGuid(1))); break; case CommandResult.StaleInstanceVersion: returnValue = new InstanceLockLostException(commandName, reader.GetGuid(1)); break; case CommandResult.HostLockExpired: returnValue = new InstancePersistenceException(SR.HostLockExpired); break; case CommandResult.HostLockNotFound: returnValue = new InstancePersistenceException(SR.HostLockNotFound); break; case CommandResult.CleanupInProgress: returnValue = new InstancePersistenceCommandException(SR.CleanupInProgress); break; case CommandResult.InstanceAlreadyLockedToOwner: returnValue = new InstanceAlreadyLockedToOwnerException(commandName, reader.GetGuid(1), reader.GetInt64(2)); break; default: returnValue = new InstancePersistenceCommandException(SR.UnknownSprocResult(result)); break; } } return returnValue; } public static Exception GetNextResultSet(XName commandName, SqlDataReader reader) { do { if (reader.Read()) { do { if (reader.FieldCount == 0) { continue; } string columnName = reader.GetName(0); if (string.Compare("Result", columnName, StringComparison.Ordinal) == 0) { return StoreUtilities.CheckResult(commandName, reader); } } while (reader.Read()); } } while (reader.NextResult()); return null; } static public bool HasExpired(this TimeoutHelper timeoutHelper) { return (timeoutHelper.RemainingTime() <= TimeSpan.Zero); } public static void TraceSqlCommand(SqlCommand command, bool isStarting) { if ((isStarting && TD.StartSqlCommandExecuteIsEnabled()) || (!isStarting && TD.EndSqlCommandExecuteIsEnabled())) { StringBuilder traceString = new StringBuilder(SqlWorkflowInstanceStoreConstants.DefaultStringBuilderCapacity); bool firstItem = false; foreach (SqlParameter sqlParameter in command.Parameters) { string value; if ((sqlParameter.Value == DBNull.Value) || (sqlParameter.Value == null)) { value = "Null"; } else if (sqlParameter.DbType == System.Data.DbType.Binary) { value = "Binary"; } else { value = sqlParameter.Value.ToString(); } if (firstItem) { traceString.AppendFormat(CultureInfo.InvariantCulture, "{0}='{1}'", sqlParameter.ParameterName, value); firstItem = false; } else { traceString.AppendFormat(CultureInfo.InvariantCulture, ", {0}='{1}'", sqlParameter.ParameterName, value); } traceString.AppendLine(command.CommandText); } if (isStarting) { TD.StartSqlCommandExecute(traceString.ToString()); } else { TD.EndSqlCommandExecute(traceString.ToString()); } } } static DictionaryReadLockOwnerMetadata(SqlDataReader reader) { Dictionary lockOwnerProperties = new Dictionary (); InstanceEncodingOption encodingOption = (InstanceEncodingOption)(reader.GetByte(3)); byte[] serializedPrimitiveLockOwnerData = reader.IsDBNull(4) ? null : (byte[]) reader.GetValue(4); byte[] serializedComplexLockOwnerData = reader.IsDBNull(5) ? null : (byte[]) reader.GetValue(5); IObjectSerializer serializer = ObjectSerializerFactory.GetObjectSerializer(encodingOption); Dictionary [] lockOwnerPropertyBags = new Dictionary [2]; if (serializedPrimitiveLockOwnerData != null) { lockOwnerPropertyBags[0] = (Dictionary )serializer.DeserializeValue(serializedPrimitiveLockOwnerData); } if (serializedComplexLockOwnerData != null) { lockOwnerPropertyBags[1] = serializer.DeserializePropertyBag(serializedComplexLockOwnerData); } foreach (Dictionary propertyBag in lockOwnerPropertyBags) { if (propertyBag != null) { foreach (KeyValuePair property in propertyBag) { lockOwnerProperties.Add(property.Key, property.Value); } } } return lockOwnerProperties; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FolderLevelBuildProvider.cs
- EncoderExceptionFallback.cs
- CodeMemberMethod.cs
- InputElement.cs
- MergablePropertyAttribute.cs
- SafeMemoryMappedFileHandle.cs
- InvalidWMPVersionException.cs
- JsonDeserializer.cs
- StatusInfoItem.cs
- ListItemsPage.cs
- ColorMap.cs
- StoryFragments.cs
- MediaCommands.cs
- DataTableMappingCollection.cs
- WrappedDispatcherException.cs
- XmlTypeAttribute.cs
- BigIntegerStorage.cs
- CssClassPropertyAttribute.cs
- WebPartDeleteVerb.cs
- XmlAnyElementAttributes.cs
- WebPartsPersonalization.cs
- SqlPersonalizationProvider.cs
- ActivityDesignerLayoutSerializers.cs
- dtdvalidator.cs
- ProviderConnectionPointCollection.cs
- FactoryMaker.cs
- LinearKeyFrames.cs
- WorkflowEventArgs.cs
- InputScope.cs
- MetadataCacheItem.cs
- AnnotationResource.cs
- ListControlBuilder.cs
- Point3DValueSerializer.cs
- mediaeventargs.cs
- ISAPIApplicationHost.cs
- PeerPresenceInfo.cs
- DataGridViewRowPrePaintEventArgs.cs
- ListViewInsertionMark.cs
- FormViewUpdatedEventArgs.cs
- PerformanceCounterPermissionEntryCollection.cs
- EditorResources.cs
- IDReferencePropertyAttribute.cs
- EventDescriptorCollection.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- ArrangedElement.cs
- HtmlContainerControl.cs
- PointAnimationUsingKeyFrames.cs
- DataPointer.cs
- AsymmetricKeyExchangeDeformatter.cs
- PerfCounters.cs
- RetrieveVirtualItemEventArgs.cs
- SQLMoneyStorage.cs
- RijndaelManagedTransform.cs
- LicenseContext.cs
- InvalidDataContractException.cs
- ExtractorMetadata.cs
- PieceNameHelper.cs
- OptimizerPatterns.cs
- AnimationTimeline.cs
- DataGridColumn.cs
- ServicePointManagerElement.cs
- DateBoldEvent.cs
- MultiViewDesigner.cs
- HTTPNotFoundHandler.cs
- TableItemStyle.cs
- WebRequestModulesSection.cs
- StringUtil.cs
- FileLevelControlBuilderAttribute.cs
- XamlStyleSerializer.cs
- TextEndOfSegment.cs
- Rect3DValueSerializer.cs
- AnnotationAdorner.cs
- ReadOnlyHierarchicalDataSource.cs
- ConfigurationStrings.cs
- XMLUtil.cs
- XamlStyleSerializer.cs
- FixedTextView.cs
- GroupBox.cs
- SurrogateChar.cs
- ItemList.cs
- CryptoConfig.cs
- GACIdentityPermission.cs
- HtmlImage.cs
- MouseActionConverter.cs
- ServiceOperationListItem.cs
- ReadOnlyCollectionBuilder.cs
- ExecutedRoutedEventArgs.cs
- DbConnectionHelper.cs
- GlobalEventManager.cs
- IntPtr.cs
- BlurBitmapEffect.cs
- AvTraceFormat.cs
- Interlocked.cs
- ReturnValue.cs
- FileDialogPermission.cs
- RayHitTestParameters.cs
- MSAANativeProvider.cs
- RequestCache.cs
- LocalizableAttribute.cs
- WebPartAddingEventArgs.cs