Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Data / System / Data / ProviderBase / DataReaderContainer.cs / 1 / DataReaderContainer.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.ProviderBase {
using System;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
internal abstract class DataReaderContainer {
protected readonly IDataReader _dataReader;
protected int _fieldCount;
static internal DataReaderContainer Create(IDataReader dataReader, bool returnProviderSpecificTypes) {
if (returnProviderSpecificTypes) {
DbDataReader providerSpecificDataReader = (dataReader as DbDataReader);
if (null != providerSpecificDataReader) {
return new ProviderSpecificDataReader(dataReader, providerSpecificDataReader);
}
}
return new CommonLanguageSubsetDataReader(dataReader);
}
protected DataReaderContainer(IDataReader dataReader) {
Debug.Assert(null != dataReader, "null dataReader");
_dataReader = dataReader;
}
internal int FieldCount {
get {
return _fieldCount;
}
}
internal abstract bool ReturnProviderSpecificTypes { get; }
protected abstract int VisibleFieldCount { get; }
internal abstract Type GetFieldType(int ordinal);
internal abstract object GetValue(int ordinal);
internal abstract int GetValues(object[] values);
internal string GetName(int ordinal) {
string fieldName = _dataReader.GetName(ordinal);
Debug.Assert(null != fieldName, "null GetName");
return ((null != fieldName) ? fieldName : "");
}
internal DataTable GetSchemaTable() {
return _dataReader.GetSchemaTable();
}
internal bool NextResult() {
_fieldCount = 0;
if (_dataReader.NextResult()) {
_fieldCount = VisibleFieldCount;
return true;
}
return false;
}
internal bool Read() {
return _dataReader.Read();
}
private sealed class ProviderSpecificDataReader : DataReaderContainer {
private DbDataReader _providerSpecificDataReader;
internal ProviderSpecificDataReader(IDataReader dataReader, DbDataReader dbDataReader) : base(dataReader) {
Debug.Assert(null != dataReader, "null dbDataReader");
_providerSpecificDataReader = dbDataReader;
_fieldCount = VisibleFieldCount;
}
internal override bool ReturnProviderSpecificTypes {
get {
return true;
}
}
protected override int VisibleFieldCount {
get {
int fieldCount = _providerSpecificDataReader.VisibleFieldCount;
Debug.Assert(0 <= fieldCount, "negative FieldCount");
return ((0 <= fieldCount) ? fieldCount : 0);
}
}
internal override Type GetFieldType(int ordinal) {
Type fieldType = _providerSpecificDataReader.GetProviderSpecificFieldType(ordinal);
Debug.Assert(null != fieldType, "null FieldType");
return fieldType;
}
internal override object GetValue(int ordinal) {
return _providerSpecificDataReader.GetProviderSpecificValue(ordinal);
}
internal override int GetValues(object[] values) {
return _providerSpecificDataReader.GetProviderSpecificValues(values);
}
}
private sealed class CommonLanguageSubsetDataReader : DataReaderContainer {
internal CommonLanguageSubsetDataReader(IDataReader dataReader ) : base(dataReader) {
_fieldCount = VisibleFieldCount;
}
internal override bool ReturnProviderSpecificTypes {
get {
return false;
}
}
protected override int VisibleFieldCount {
get {
int fieldCount = _dataReader.FieldCount;
Debug.Assert(0 <= fieldCount, "negative FieldCount");
return ((0 <= fieldCount) ? fieldCount : 0);
}
}
internal override Type GetFieldType(int ordinal) {
return _dataReader.GetFieldType(ordinal);
}
internal override object GetValue(int ordinal) {
return _dataReader.GetValue(ordinal);
}
internal override int GetValues(object[] values) {
return _dataReader.GetValues(values);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Int32Converter.cs
- ManagementObject.cs
- XmlCodeExporter.cs
- ReliableInputConnection.cs
- AutomationElementIdentifiers.cs
- PageThemeCodeDomTreeGenerator.cs
- WpfMemberInvoker.cs
- OutOfProcStateClientManager.cs
- TraceHandlerErrorFormatter.cs
- TagMapCollection.cs
- ObjectDataProvider.cs
- DataServiceExpressionVisitor.cs
- ComEventsInfo.cs
- OleDbReferenceCollection.cs
- CompositeScriptReferenceEventArgs.cs
- GridSplitter.cs
- XamlInt32CollectionSerializer.cs
- OutputCacheModule.cs
- NTAccount.cs
- CalculatedColumn.cs
- PrimitiveSchema.cs
- RayHitTestParameters.cs
- Condition.cs
- ApplicationHost.cs
- SeekStoryboard.cs
- SemanticValue.cs
- DetailsViewInsertEventArgs.cs
- ChildDocumentBlock.cs
- ActionMessageFilterTable.cs
- WebScriptMetadataFormatter.cs
- WorkflowWebHostingModule.cs
- KeyFrames.cs
- Rect.cs
- PointCollectionValueSerializer.cs
- objectquery_tresulttype.cs
- XmlImplementation.cs
- ConfigXmlCDataSection.cs
- TextTreeUndoUnit.cs
- CodeRemoveEventStatement.cs
- SocketException.cs
- ModulesEntry.cs
- CellLabel.cs
- XmlSerializerNamespaces.cs
- PopupEventArgs.cs
- MergeFailedEvent.cs
- DbConnectionPoolIdentity.cs
- SchemaNotation.cs
- StructuralCache.cs
- ReleaseInstanceMode.cs
- ResourceReader.cs
- PtsPage.cs
- XPathExpr.cs
- HttpCacheVaryByContentEncodings.cs
- XmlStringTable.cs
- StateElement.cs
- BufferedOutputStream.cs
- ScrollChrome.cs
- LinkedList.cs
- DmlSqlGenerator.cs
- Directory.cs
- HttpWriter.cs
- ValidatedControlConverter.cs
- TableLayoutStyleCollection.cs
- ProfileGroupSettings.cs
- precedingquery.cs
- RenderData.cs
- CapacityStreamGeometryContext.cs
- ErrorHandler.cs
- ValidatorCollection.cs
- HostDesigntimeLicenseContext.cs
- OperationAbortedException.cs
- SpellerError.cs
- UnsignedPublishLicense.cs
- KnownBoxes.cs
- DateTimeHelper.cs
- DataGridViewRowPrePaintEventArgs.cs
- IncrementalHitTester.cs
- RouteParser.cs
- CompositionTarget.cs
- ConnectionManagementSection.cs
- DispatcherHookEventArgs.cs
- MouseDevice.cs
- UidPropertyAttribute.cs
- ExtractorMetadata.cs
- RolePrincipal.cs
- SecurityVersion.cs
- RegistryKey.cs
- Reference.cs
- WebResourceUtil.cs
- HtmlShimManager.cs
- StylusDownEventArgs.cs
- DependencyObjectProvider.cs
- BamlResourceSerializer.cs
- EntryIndex.cs
- _BaseOverlappedAsyncResult.cs
- Geometry3D.cs
- ResourceKey.cs
- ServerValidateEventArgs.cs
- TextBoxDesigner.cs
- EventProxy.cs