Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Data / System / Data / Common / DBSchemaTable.cs / 1 / DBSchemaTable.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.Common {
using System;
using System.Data;
using System.Data.ProviderBase;
using System.Diagnostics;
sealed internal class DbSchemaTable {
private enum ColumnEnum {
ColumnName,
ColumnOrdinal,
ColumnSize,
BaseServerName,
BaseCatalogName,
BaseColumnName,
BaseSchemaName,
BaseTableName,
IsAutoIncrement,
IsUnique,
IsKey,
IsRowVersion,
DataType,
ProviderSpecificDataType,
AllowDBNull,
ProviderType,
IsExpression,
IsHidden,
IsLong,
IsReadOnly,
SchemaMappingUnsortedIndex,
}
static readonly private string[] DBCOLUMN_NAME = new string[] {
SchemaTableColumn.ColumnName,
SchemaTableColumn.ColumnOrdinal,
SchemaTableColumn.ColumnSize,
SchemaTableOptionalColumn.BaseServerName,
SchemaTableOptionalColumn.BaseCatalogName,
SchemaTableColumn.BaseColumnName,
SchemaTableColumn.BaseSchemaName,
SchemaTableColumn.BaseTableName,
SchemaTableOptionalColumn.IsAutoIncrement,
SchemaTableColumn.IsUnique,
SchemaTableColumn.IsKey,
SchemaTableOptionalColumn.IsRowVersion,
SchemaTableColumn.DataType,
SchemaTableOptionalColumn.ProviderSpecificDataType,
SchemaTableColumn.AllowDBNull,
SchemaTableColumn.ProviderType,
SchemaTableColumn.IsExpression,
SchemaTableOptionalColumn.IsHidden,
SchemaTableColumn.IsLong,
SchemaTableOptionalColumn.IsReadOnly,
DbSchemaRow.SchemaMappingUnsortedIndex,
};
internal DataTable dataTable;
private DataColumnCollection columns;
private DataColumn[] columnCache = new DataColumn[DBCOLUMN_NAME.Length];
private bool _returnProviderSpecificTypes;
internal DbSchemaTable(DataTable dataTable, bool returnProviderSpecificTypes) {
this.dataTable = dataTable;
this.columns = dataTable.Columns;
_returnProviderSpecificTypes = returnProviderSpecificTypes;
}
internal DataColumn ColumnName { get { return CachedDataColumn(ColumnEnum.ColumnName);}}
internal DataColumn Size { get { return CachedDataColumn(ColumnEnum.ColumnSize);}}
internal DataColumn BaseServerName { get { return CachedDataColumn(ColumnEnum.BaseServerName);}}
internal DataColumn BaseColumnName { get { return CachedDataColumn(ColumnEnum.BaseColumnName);}}
internal DataColumn BaseTableName { get { return CachedDataColumn(ColumnEnum.BaseTableName);}}
internal DataColumn BaseCatalogName { get { return CachedDataColumn(ColumnEnum.BaseCatalogName);}}
internal DataColumn BaseSchemaName { get { return CachedDataColumn(ColumnEnum.BaseSchemaName);}}
internal DataColumn IsAutoIncrement { get { return CachedDataColumn(ColumnEnum.IsAutoIncrement);}}
internal DataColumn IsUnique { get { return CachedDataColumn(ColumnEnum.IsUnique);}}
internal DataColumn IsKey { get { return CachedDataColumn(ColumnEnum.IsKey);}}
internal DataColumn IsRowVersion { get { return CachedDataColumn(ColumnEnum.IsRowVersion);}}
internal DataColumn AllowDBNull { get { return CachedDataColumn(ColumnEnum.AllowDBNull);}}
internal DataColumn IsExpression { get { return CachedDataColumn(ColumnEnum.IsExpression);}}
internal DataColumn IsHidden { get { return CachedDataColumn(ColumnEnum.IsHidden);}}
internal DataColumn IsLong { get { return CachedDataColumn(ColumnEnum.IsLong);}}
internal DataColumn IsReadOnly { get { return CachedDataColumn(ColumnEnum.IsReadOnly);}}
internal DataColumn UnsortedIndex { get { return CachedDataColumn(ColumnEnum.SchemaMappingUnsortedIndex);}}
internal DataColumn DataType {
get {
if (_returnProviderSpecificTypes) {
return CachedDataColumn(ColumnEnum.ProviderSpecificDataType, ColumnEnum.DataType);
}
return CachedDataColumn(ColumnEnum.DataType);
}
}
private DataColumn CachedDataColumn(ColumnEnum column) {
return CachedDataColumn(column, column);
}
private DataColumn CachedDataColumn(ColumnEnum column, ColumnEnum column2) {
DataColumn dataColumn = columnCache[(int) column];
if (null == dataColumn) {
int index = columns.IndexOf(DBCOLUMN_NAME[(int) column]);
if ((-1 == index) && (column != column2)) {
index = columns.IndexOf(DBCOLUMN_NAME[(int) column2]);
}
if (-1 != index) {
dataColumn = columns[index];
columnCache[(int) column] = dataColumn;
}
}
return dataColumn;
}
}
}
// 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
- ResourcePermissionBaseEntry.cs
- ConfigXmlWhitespace.cs
- localization.cs
- XmlILOptimizerVisitor.cs
- XmlSchemaGroupRef.cs
- CompositeScriptReference.cs
- MeasureItemEvent.cs
- UInt64.cs
- Rule.cs
- WmpBitmapDecoder.cs
- NotFiniteNumberException.cs
- counter.cs
- EditorAttribute.cs
- ExtensibleSyndicationObject.cs
- TabItemWrapperAutomationPeer.cs
- WindowsListViewScroll.cs
- PathFigureCollection.cs
- FamilyCollection.cs
- TileModeValidation.cs
- TempEnvironment.cs
- SoapParser.cs
- ProcessHost.cs
- MexTcpBindingElement.cs
- ModelItemCollection.cs
- ToolStripContentPanel.cs
- AdPostCacheSubstitution.cs
- TextEditorTables.cs
- InstanceDescriptor.cs
- StringSorter.cs
- NamedPermissionSet.cs
- RawStylusSystemGestureInputReport.cs
- VisualTreeUtils.cs
- DynamicDocumentPaginator.cs
- XmlElement.cs
- __ConsoleStream.cs
- MenuItemStyle.cs
- CodeComment.cs
- SatelliteContractVersionAttribute.cs
- ControlEvent.cs
- BooleanFunctions.cs
- Hashtable.cs
- ManualResetEvent.cs
- UIElementHelper.cs
- DataRecordInternal.cs
- SeverityFilter.cs
- FullTextState.cs
- SettingsSection.cs
- SessionEndedEventArgs.cs
- AssociatedControlConverter.cs
- CompositeFontInfo.cs
- ConvertEvent.cs
- StylusPointPropertyId.cs
- ContentDisposition.cs
- ActivityPreviewDesigner.cs
- Wrapper.cs
- PingOptions.cs
- Assembly.cs
- UiaCoreApi.cs
- EdmSchemaError.cs
- SqlProviderServices.cs
- DataGridHelper.cs
- AndMessageFilterTable.cs
- ColumnReorderedEventArgs.cs
- XmlTextEncoder.cs
- LocalizedNameDescriptionPair.cs
- _IPv4Address.cs
- AnonymousIdentificationModule.cs
- IdentityReference.cs
- BitmapData.cs
- LinkTarget.cs
- DictionaryContent.cs
- LinkUtilities.cs
- SequentialUshortCollection.cs
- WCFModelStrings.Designer.cs
- MessageSecurityTokenVersion.cs
- ErrorLog.cs
- ZipIOCentralDirectoryDigitalSignature.cs
- ManagementPath.cs
- BooleanFacetDescriptionElement.cs
- MenuTracker.cs
- PointCollection.cs
- SecureStringHasher.cs
- AdCreatedEventArgs.cs
- StringDictionaryWithComparer.cs
- ModifierKeysConverter.cs
- COM2FontConverter.cs
- WorkflowOperationErrorHandler.cs
- LogicalMethodInfo.cs
- ActivityDesignerLayoutSerializers.cs
- Validator.cs
- JapaneseLunisolarCalendar.cs
- MessageQueuePermission.cs
- GridPatternIdentifiers.cs
- AmbiguousMatchException.cs
- Calendar.cs
- AmbientLight.cs
- OleDbDataAdapter.cs
- WebConfigurationHostFileChange.cs
- RowParagraph.cs
- HttpConfigurationSystem.cs