Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Data / System / Data / SqlClient / TdsRecordBufferSetter.cs / 4 / TdsRecordBufferSetter.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.SqlClient {
using Microsoft.SqlServer.Server;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Data.SqlTypes;
// TdsRecordBufferSetter handles writing a structured value out to a TDS stream
internal class TdsRecordBufferSetter : SmiRecordBuffer {
#region Fields (private)
private TdsValueSetter[] _fieldSetters; // setters for individual fields
private TdsParserStateObject _stateObj; // target to write to
private SmiMetaData _metaData; // metadata describing value
#if DEBUG
private const int ReadyForToken = -1; // must call new/end element next
private const int EndElementsCalled = -2; // already called EndElements, can only call Close
private const int Closed = -3; // closed (zombied)
private int _currentField; // validate that caller sets columns in correct order.
#endif
#endregion
#region Exposed Construct and control methods/properties
internal TdsRecordBufferSetter(TdsParserStateObject stateObj, SmiMetaData md) {
Debug.Assert(SqlDbType.Structured == md.SqlDbType, "Unsupported SqlDbType: " + md.SqlDbType);
_fieldSetters = new TdsValueSetter[md.FieldMetaData.Count];
for(int i=0; i _currentField, "_currentField out of range for setting a column:" + _currentField);
Debug.Assert(ordinal == _currentField, "Setter called out of order. Should be " + _currentField + ", but was " + ordinal);
// Must not write to field with a DefaultFieldsProperty set to true
Debug.Assert(!((SmiDefaultFieldsProperty)_metaData.ExtendedProperties[SmiPropertySelector.DefaultFields])[ordinal],
"Attempt to write to a default-valued field: " + ordinal);
#endif
}
// Handle logic of skipping default columns
[Conditional("DEBUG")]
private void SkipPossibleDefaultedColumns(int targetColumn) {
#if DEBUG
Debug.Assert(targetColumn < _metaData.FieldMetaData.Count && targetColumn >= ReadyForToken, "TdsRecordBufferSetter.SkipPossibleDefaultedColumns: Invalid target column: " + targetColumn);
// special setup for ReadyForToken as the target
if (targetColumn == ReadyForToken) {
if (ReadyForToken == _currentField) {
return;
}
// Handle readyfortoken by using count of columns in the loop.
targetColumn = _metaData.FieldMetaData.Count;
}
// Handle skipping default-valued fields
while (targetColumn > _currentField) {
// All intermediate fields must be default fields (i.e. have a "true" entry in SmiDefaultFieldsProperty
Debug.Assert(((SmiDefaultFieldsProperty)_metaData.ExtendedProperties[SmiPropertySelector.DefaultFields])[_currentField],
"Skipping a field that was not default: " + _currentField);
_currentField++;
}
if (_metaData.FieldMetaData.Count == _currentField) {
_currentField = ReadyForToken;
}
#endif
}
[Conditional("DEBUG")]
internal void CheckSettingColumn(int ordinal) {
#if DEBUG
// Make sure target column can be written to.
CheckWritingToColumn(ordinal);
_currentField++;
if (_metaData.FieldMetaData.Count == _currentField) {
_currentField = ReadyForToken;
}
#endif
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.SqlClient {
using Microsoft.SqlServer.Server;
using System;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Data.SqlTypes;
// TdsRecordBufferSetter handles writing a structured value out to a TDS stream
internal class TdsRecordBufferSetter : SmiRecordBuffer {
#region Fields (private)
private TdsValueSetter[] _fieldSetters; // setters for individual fields
private TdsParserStateObject _stateObj; // target to write to
private SmiMetaData _metaData; // metadata describing value
#if DEBUG
private const int ReadyForToken = -1; // must call new/end element next
private const int EndElementsCalled = -2; // already called EndElements, can only call Close
private const int Closed = -3; // closed (zombied)
private int _currentField; // validate that caller sets columns in correct order.
#endif
#endregion
#region Exposed Construct and control methods/properties
internal TdsRecordBufferSetter(TdsParserStateObject stateObj, SmiMetaData md) {
Debug.Assert(SqlDbType.Structured == md.SqlDbType, "Unsupported SqlDbType: " + md.SqlDbType);
_fieldSetters = new TdsValueSetter[md.FieldMetaData.Count];
for(int i=0; i _currentField, "_currentField out of range for setting a column:" + _currentField);
Debug.Assert(ordinal == _currentField, "Setter called out of order. Should be " + _currentField + ", but was " + ordinal);
// Must not write to field with a DefaultFieldsProperty set to true
Debug.Assert(!((SmiDefaultFieldsProperty)_metaData.ExtendedProperties[SmiPropertySelector.DefaultFields])[ordinal],
"Attempt to write to a default-valued field: " + ordinal);
#endif
}
// Handle logic of skipping default columns
[Conditional("DEBUG")]
private void SkipPossibleDefaultedColumns(int targetColumn) {
#if DEBUG
Debug.Assert(targetColumn < _metaData.FieldMetaData.Count && targetColumn >= ReadyForToken, "TdsRecordBufferSetter.SkipPossibleDefaultedColumns: Invalid target column: " + targetColumn);
// special setup for ReadyForToken as the target
if (targetColumn == ReadyForToken) {
if (ReadyForToken == _currentField) {
return;
}
// Handle readyfortoken by using count of columns in the loop.
targetColumn = _metaData.FieldMetaData.Count;
}
// Handle skipping default-valued fields
while (targetColumn > _currentField) {
// All intermediate fields must be default fields (i.e. have a "true" entry in SmiDefaultFieldsProperty
Debug.Assert(((SmiDefaultFieldsProperty)_metaData.ExtendedProperties[SmiPropertySelector.DefaultFields])[_currentField],
"Skipping a field that was not default: " + _currentField);
_currentField++;
}
if (_metaData.FieldMetaData.Count == _currentField) {
_currentField = ReadyForToken;
}
#endif
}
[Conditional("DEBUG")]
internal void CheckSettingColumn(int ordinal) {
#if DEBUG
// Make sure target column can be written to.
CheckWritingToColumn(ordinal);
_currentField++;
if (_metaData.FieldMetaData.Count == _currentField) {
_currentField = ReadyForToken;
}
#endif
}
#endregion
}
}
// 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
- ObjectViewFactory.cs
- ContextBase.cs
- Compilation.cs
- Page.cs
- CodeIndexerExpression.cs
- CurrencyWrapper.cs
- TypeDescriptionProviderAttribute.cs
- SamlSubjectStatement.cs
- ContourSegment.cs
- ErrorTableItemStyle.cs
- NavigationHelper.cs
- SoapSchemaImporter.cs
- HashStream.cs
- OverlappedAsyncResult.cs
- TransactionContextValidator.cs
- Message.cs
- ProfilePropertyMetadata.cs
- MetadataSource.cs
- RowToParametersTransformer.cs
- WeakReferenceEnumerator.cs
- PartitionResolver.cs
- UnsafeNativeMethods.cs
- ParsedAttributeCollection.cs
- EndOfStreamException.cs
- DelegatingHeader.cs
- EdgeModeValidation.cs
- OwnerDrawPropertyBag.cs
- CheckBox.cs
- TreeIterator.cs
- DBNull.cs
- Keywords.cs
- NullableIntMinMaxAggregationOperator.cs
- RouteTable.cs
- ViewKeyConstraint.cs
- ResolveNameEventArgs.cs
- FatalException.cs
- UIElementCollection.cs
- SystemMulticastIPAddressInformation.cs
- WMIInterop.cs
- TextOnlyOutput.cs
- System.Data_BID.cs
- DrawingAttributes.cs
- SizeAnimationClockResource.cs
- ZoneIdentityPermission.cs
- BordersPage.cs
- IPCCacheManager.cs
- MessageQueueTransaction.cs
- DataGridViewRowConverter.cs
- ResXFileRef.cs
- Helper.cs
- GraphicsState.cs
- JavaScriptObjectDeserializer.cs
- SocketStream.cs
- WebBrowserUriTypeConverter.cs
- SystemTcpConnection.cs
- LicenseException.cs
- RadioButtonList.cs
- IndicCharClassifier.cs
- SafeProcessHandle.cs
- GcHandle.cs
- SqlNodeTypeOperators.cs
- FactoryId.cs
- LongMinMaxAggregationOperator.cs
- ExceptionHandler.cs
- EtwTrackingBehavior.cs
- ObjectResult.cs
- DrawingGroupDrawingContext.cs
- WebSysDefaultValueAttribute.cs
- BasicViewGenerator.cs
- MessageVersionConverter.cs
- XmlWriterTraceListener.cs
- ImageIndexConverter.cs
- SecurityPolicySection.cs
- XmlILAnnotation.cs
- TextParaLineResult.cs
- TraceSection.cs
- ECDsaCng.cs
- BasicBrowserDialog.cs
- ImportContext.cs
- Style.cs
- ManifestSignedXml.cs
- ArgIterator.cs
- WebScriptMetadataMessage.cs
- TreeViewBindingsEditorForm.cs
- InputMethod.cs
- TypeRefElement.cs
- SequenceRangeCollection.cs
- View.cs
- XamlFilter.cs
- Converter.cs
- FlowNode.cs
- ListQueryResults.cs
- MgmtConfigurationRecord.cs
- DummyDataSource.cs
- ConsumerConnectionPointCollection.cs
- AliasGenerator.cs
- DateTime.cs
- DataGridViewLayoutData.cs
- BamlLocalizabilityResolver.cs
- ExtentCqlBlock.cs