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
- DataTableMappingCollection.cs
- ServiceRouteHandler.cs
- TableStyle.cs
- DataGridViewIntLinkedList.cs
- XmlToDatasetMap.cs
- Accessible.cs
- SmiContext.cs
- MeshGeometry3D.cs
- TerminateDesigner.cs
- DynamicFilter.cs
- AccessViolationException.cs
- MultiSelector.cs
- ItemCheckEvent.cs
- LogEntryHeaderv1Deserializer.cs
- RegexRunner.cs
- SoapCodeExporter.cs
- GroupItemAutomationPeer.cs
- ItemList.cs
- PropertyBuilder.cs
- ReadOnlyAttribute.cs
- _NetRes.cs
- Queue.cs
- StructuredType.cs
- CallContext.cs
- StrokeRenderer.cs
- DeleteMemberBinder.cs
- SpellerInterop.cs
- WebPartDeleteVerb.cs
- EditorPartChrome.cs
- mda.cs
- ListSourceHelper.cs
- ImageCodecInfo.cs
- CompressStream.cs
- PerformanceCounterPermissionEntry.cs
- EntityContainerRelationshipSet.cs
- ErrorWrapper.cs
- ActivityTypeResolver.xaml.cs
- ConfigurationManagerInternal.cs
- ConfigXmlSignificantWhitespace.cs
- BufferedOutputStream.cs
- XmlAttribute.cs
- PointLight.cs
- SR.cs
- X509SecurityTokenAuthenticator.cs
- RequestCacheManager.cs
- _DisconnectOverlappedAsyncResult.cs
- returneventsaver.cs
- PeerTransportBindingElement.cs
- FontWeight.cs
- RuntimeEnvironment.cs
- HtmlFormWrapper.cs
- XsltContext.cs
- GeometryDrawing.cs
- ToolboxBitmapAttribute.cs
- GridToolTip.cs
- HttpInputStream.cs
- ColorDialog.cs
- ProxyHelper.cs
- HttpConfigurationContext.cs
- StringCollection.cs
- MatrixStack.cs
- Int64Storage.cs
- SecurityHelper.cs
- Stack.cs
- ServiceObjectContainer.cs
- Relationship.cs
- LogicalChannelCollection.cs
- MessageQueueException.cs
- EncoderBestFitFallback.cs
- DataGridViewRowConverter.cs
- EqualityComparer.cs
- XPathAxisIterator.cs
- Menu.cs
- GlyphShapingProperties.cs
- DbDataAdapter.cs
- ExtractCollection.cs
- LinkedList.cs
- MetadataSerializer.cs
- HttpApplicationStateBase.cs
- XmlWrappingReader.cs
- DesignerDataTableBase.cs
- LineGeometry.cs
- ConfigurationValidatorAttribute.cs
- TypeInitializationException.cs
- AccessedThroughPropertyAttribute.cs
- SettingsPropertyCollection.cs
- SmtpTransport.cs
- CodeRegionDirective.cs
- WebResourceAttribute.cs
- EventHandlingScope.cs
- InkPresenterAutomationPeer.cs
- SecurityPolicySection.cs
- NumericExpr.cs
- QueryPageSettingsEventArgs.cs
- ToolStripStatusLabel.cs
- CodeIdentifiers.cs
- EntityDataSourceViewSchema.cs
- OneToOneMappingSerializer.cs
- ScriptReferenceEventArgs.cs
- InlineObject.cs