Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Data / System / Data / Common / DbProviderFactories.cs / 1 / DbProviderFactories.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.Common {
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Globalization;
using System.Xml;
#if WINFSInternalOnly
internal
#else
public
#endif
static class DbProviderFactories {
private const string AssemblyQualifiedName = "AssemblyQualifiedName";
private const string Instance = "Instance";
private const string InvariantName = "InvariantName";
private static ConnectionState _initState; // closed, connecting, open
private static DataSet _configTable;
private static object _lockobj = new object();
static public DbProviderFactory GetFactory(string providerInvariantName) {
ADP.CheckArgumentLength(providerInvariantName, "providerInvariantName");
DataSet configTable = GetConfigTable();
DataTable providerTable = ((null != configTable) ? configTable.Tables[DbProviderFactoriesConfigurationHandler.providerGroup] : null);
if (null != providerTable) {
// we don't need to copy the DataTable because its used in a controlled fashion
// also we don't need to create a blank datatable because we know the information won't exist
#if DEBUG
DataColumn[] pkey = providerTable.PrimaryKey;
Debug.Assert(null != providerTable.Columns[InvariantName], "missing primary key column");
Debug.Assert((null != pkey) && (1 == pkey.Length) && (InvariantName == pkey[0].ColumnName), "bad primary key");
#endif
DataRow providerRow = providerTable.Rows.Find(providerInvariantName);
if (null != providerRow) {
return DbProviderFactories.GetFactory(providerRow);
}
}
throw ADP.ConfigProviderNotFound();
}
static public DbProviderFactory GetFactory(DataRow providerRow) {
ADP.CheckArgumentNull(providerRow, "providerRow");
// fail with ConfigProviderMissing rather than ColumnNotInTheTable exception
DataColumn column = providerRow.Table.Columns[AssemblyQualifiedName];
if (null != column) {
// column value may not be a string
string assemblyQualifiedName = providerRow[column] as string;
if (!ADP.IsEmpty(assemblyQualifiedName)) {
// FXCop is concerned about the following line call to Get Type,
// If this code is deemed safe during our security review we should add this warning to our exclusion list.
// FXCop Message, pertaining to the call to GetType.
//
// Secure late-binding methods,System.Data.dll!System.Data.Common.DbProviderFactories.GetFactory(System.Data.DataRow):System.Data.Common.DbProviderFactory,
Type providerType = Type.GetType(assemblyQualifiedName);
if (null != providerType) {
System.Reflection.FieldInfo providerInstance = providerType.GetField(Instance, System.Reflection.BindingFlags.DeclaredOnly|System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Static);
if (null != providerInstance) {
Debug.Assert(providerInstance.IsPublic, "field not public");
Debug.Assert(providerInstance.IsStatic, "field not static");
if (providerInstance.FieldType.IsSubclassOf(typeof(DbProviderFactory))) {
object factory = providerInstance.GetValue(null);
if (null != factory) {
return (DbProviderFactory)factory;
}
// else throw ConfigProviderInvalid
}
// else throw ConfigProviderInvalid
}
throw ADP.ConfigProviderInvalid();
}
throw ADP.ConfigProviderNotInstalled();
}
// else throw ConfigProviderMissing
}
throw ADP.ConfigProviderMissing();
}
static public DataTable GetFactoryClasses() { // V1.2.3300
DataSet configTable = GetConfigTable();
DataTable dataTable = ((null != configTable) ? configTable.Tables[DbProviderFactoriesConfigurationHandler.providerGroup] : null);
if (null != dataTable) {
dataTable = dataTable.Copy();
}
else {
dataTable = DbProviderFactoriesConfigurationHandler.CreateProviderDataTable();
}
return dataTable;
}
static private DataSet GetConfigTable() {
Initialize();
return _configTable;
}
static private void Initialize() {
if (ConnectionState.Open != _initState) {
lock (_lockobj) {
switch(_initState) {
case ConnectionState.Closed:
_initState = ConnectionState.Connecting; // used for preventing recursion
try {
_configTable = PrivilegedConfigurationManager.GetSection(DbProviderFactoriesConfigurationHandler.sectionName) as DataSet;
}
finally {
_initState = ConnectionState.Open;
}
break;
case ConnectionState.Connecting:
case ConnectionState.Open:
break;
default:
Debug.Assert(false, "unexpected state");
break;
}
}
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data.Common {
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Globalization;
using System.Xml;
#if WINFSInternalOnly
internal
#else
public
#endif
static class DbProviderFactories {
private const string AssemblyQualifiedName = "AssemblyQualifiedName";
private const string Instance = "Instance";
private const string InvariantName = "InvariantName";
private static ConnectionState _initState; // closed, connecting, open
private static DataSet _configTable;
private static object _lockobj = new object();
static public DbProviderFactory GetFactory(string providerInvariantName) {
ADP.CheckArgumentLength(providerInvariantName, "providerInvariantName");
DataSet configTable = GetConfigTable();
DataTable providerTable = ((null != configTable) ? configTable.Tables[DbProviderFactoriesConfigurationHandler.providerGroup] : null);
if (null != providerTable) {
// we don't need to copy the DataTable because its used in a controlled fashion
// also we don't need to create a blank datatable because we know the information won't exist
#if DEBUG
DataColumn[] pkey = providerTable.PrimaryKey;
Debug.Assert(null != providerTable.Columns[InvariantName], "missing primary key column");
Debug.Assert((null != pkey) && (1 == pkey.Length) && (InvariantName == pkey[0].ColumnName), "bad primary key");
#endif
DataRow providerRow = providerTable.Rows.Find(providerInvariantName);
if (null != providerRow) {
return DbProviderFactories.GetFactory(providerRow);
}
}
throw ADP.ConfigProviderNotFound();
}
static public DbProviderFactory GetFactory(DataRow providerRow) {
ADP.CheckArgumentNull(providerRow, "providerRow");
// fail with ConfigProviderMissing rather than ColumnNotInTheTable exception
DataColumn column = providerRow.Table.Columns[AssemblyQualifiedName];
if (null != column) {
// column value may not be a string
string assemblyQualifiedName = providerRow[column] as string;
if (!ADP.IsEmpty(assemblyQualifiedName)) {
// FXCop is concerned about the following line call to Get Type,
// If this code is deemed safe during our security review we should add this warning to our exclusion list.
// FXCop Message, pertaining to the call to GetType.
//
// Secure late-binding methods,System.Data.dll!System.Data.Common.DbProviderFactories.GetFactory(System.Data.DataRow):System.Data.Common.DbProviderFactory,
Type providerType = Type.GetType(assemblyQualifiedName);
if (null != providerType) {
System.Reflection.FieldInfo providerInstance = providerType.GetField(Instance, System.Reflection.BindingFlags.DeclaredOnly|System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Static);
if (null != providerInstance) {
Debug.Assert(providerInstance.IsPublic, "field not public");
Debug.Assert(providerInstance.IsStatic, "field not static");
if (providerInstance.FieldType.IsSubclassOf(typeof(DbProviderFactory))) {
object factory = providerInstance.GetValue(null);
if (null != factory) {
return (DbProviderFactory)factory;
}
// else throw ConfigProviderInvalid
}
// else throw ConfigProviderInvalid
}
throw ADP.ConfigProviderInvalid();
}
throw ADP.ConfigProviderNotInstalled();
}
// else throw ConfigProviderMissing
}
throw ADP.ConfigProviderMissing();
}
static public DataTable GetFactoryClasses() { // V1.2.3300
DataSet configTable = GetConfigTable();
DataTable dataTable = ((null != configTable) ? configTable.Tables[DbProviderFactoriesConfigurationHandler.providerGroup] : null);
if (null != dataTable) {
dataTable = dataTable.Copy();
}
else {
dataTable = DbProviderFactoriesConfigurationHandler.CreateProviderDataTable();
}
return dataTable;
}
static private DataSet GetConfigTable() {
Initialize();
return _configTable;
}
static private void Initialize() {
if (ConnectionState.Open != _initState) {
lock (_lockobj) {
switch(_initState) {
case ConnectionState.Closed:
_initState = ConnectionState.Connecting; // used for preventing recursion
try {
_configTable = PrivilegedConfigurationManager.GetSection(DbProviderFactoriesConfigurationHandler.sectionName) as DataSet;
}
finally {
_initState = ConnectionState.Open;
}
break;
case ConnectionState.Connecting:
case ConnectionState.Open:
break;
default:
Debug.Assert(false, "unexpected state");
break;
}
}
}
}
}
}
// 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
- HostingEnvironmentSection.cs
- DataServiceQueryProvider.cs
- StickyNoteHelper.cs
- AppLevelCompilationSectionCache.cs
- BitmapSourceSafeMILHandle.cs
- GreenMethods.cs
- ScaleTransform.cs
- EntityParameter.cs
- SchemaElementLookUpTable.cs
- ServicePrincipalNameElement.cs
- AnnouncementService.cs
- Translator.cs
- BaseDataListDesigner.cs
- DataGridViewRowCancelEventArgs.cs
- WebPartConnectionsConnectVerb.cs
- BitmapEffectDrawingContextWalker.cs
- Misc.cs
- ElementAction.cs
- IImplicitResourceProvider.cs
- ExpressionBindingCollection.cs
- BitmapSource.cs
- PrimaryKeyTypeConverter.cs
- EntityDesignerDataSourceView.cs
- Empty.cs
- PolyQuadraticBezierSegment.cs
- OdbcEnvironmentHandle.cs
- DbException.cs
- FixedSOMImage.cs
- XmlQueryRuntime.cs
- __Error.cs
- DetailsViewPageEventArgs.cs
- ColorBuilder.cs
- ManifestResourceInfo.cs
- DesignTimeParseData.cs
- AppDomainFactory.cs
- sqlpipe.cs
- DataGridColumnCollection.cs
- FloaterBaseParagraph.cs
- ParserOptions.cs
- FactoryGenerator.cs
- ChameleonKey.cs
- CommonDialog.cs
- CommonDialog.cs
- DummyDataSource.cs
- ReturnType.cs
- Line.cs
- GridViewSelectEventArgs.cs
- CapabilitiesSection.cs
- ArcSegment.cs
- CodeCatchClause.cs
- SHA384Cng.cs
- SkipQueryOptionExpression.cs
- StateInitializationDesigner.cs
- Int16AnimationBase.cs
- XmlTextAttribute.cs
- DocumentViewerAutomationPeer.cs
- PrintDialog.cs
- XPathArrayIterator.cs
- StreamGeometry.cs
- CodeRemoveEventStatement.cs
- JsonFormatWriterGenerator.cs
- SigningDialog.cs
- FileReader.cs
- PolyLineSegment.cs
- MsmqIntegrationValidationBehavior.cs
- DataGridViewColumnConverter.cs
- FixedSOMTableRow.cs
- SystemIPv4InterfaceProperties.cs
- SiblingIterators.cs
- DiagnosticStrings.cs
- TransformConverter.cs
- OdbcConnectionFactory.cs
- Model3D.cs
- NotificationContext.cs
- Events.cs
- WebPartZoneAutoFormat.cs
- InkCanvas.cs
- GeneralTransform3DCollection.cs
- Command.cs
- RtfControls.cs
- SecurityContextSecurityTokenAuthenticator.cs
- ResourcePermissionBase.cs
- DefaultValueAttribute.cs
- DataService.cs
- HMAC.cs
- ConfigurationStrings.cs
- AnnotationService.cs
- ObjectCache.cs
- ServiceInstanceProvider.cs
- AuthenticationSection.cs
- Int32CollectionValueSerializer.cs
- TemplateField.cs
- DataContractSerializerSection.cs
- TableLayoutCellPaintEventArgs.cs
- SimpleParser.cs
- CacheMemory.cs
- MsmqOutputChannel.cs
- ComponentGuaranteesAttribute.cs
- ContextMenu.cs
- RoleManagerEventArgs.cs