public static DataTable GetFactoryClasses() { DataTable providerTable = GetProviderTable(); if (providerTable != null) { return(providerTable.Copy()); } return(DbProviderFactoriesConfigurationHandler.CreateProviderDataTable()); }
static public DataTable GetFactoryClasses() // V1.2.3300 // NOTES: Include the Framework Providers and any other Providers listed in the config file. { DataTable dataTable = GetProviderTable(); if (null != dataTable) { dataTable = dataTable.Copy(); } else { dataTable = DbProviderFactoriesConfigurationHandler.CreateProviderDataTable(); } return(dataTable); }
internal static DataTable CreateStatic(DataTable config, object context, XmlNode section) { if (section != null) { System.Data.Common.HandlerBase.CheckForUnrecognizedAttributes(section); if (config == null) { config = DbProviderFactoriesConfigurationHandler.CreateProviderDataTable(); } foreach (XmlNode node in section.ChildNodes) { if (!System.Data.Common.HandlerBase.IsIgnorableAlsoCheckForNonElement(node)) { string name = node.Name; if (name == null) { goto Label_0086; } if (!(name == "add")) { if (name == "remove") { goto Label_0074; } if (name == "clear") { goto Label_007D; } goto Label_0086; } HandleAdd(node, config); } continue; Label_0074: HandleRemove(node, config); continue; Label_007D: HandleClear(node, config); continue; Label_0086: throw ADP.ConfigUnrecognizedElement(node); } config.AcceptChanges(); } return(config); }
/* * internal DbProviderDictionarySectionHandler() { * } * * public object Create(Object parent, Object context, XmlNode section) { * return CreateStatic(parent, context, section); * } */ static internal DataTable CreateStatic(DataTable config, Object context, XmlNode section) { if (null != section) { HandlerBase.CheckForUnrecognizedAttributes(section); if (null == config) { config = DbProviderFactoriesConfigurationHandler.CreateProviderDataTable(); } // else already copied via DataSet.Copy foreach (XmlNode child in section.ChildNodes) { if (HandlerBase.IsIgnorableAlsoCheckForNonElement(child)) { continue; } switch (child.Name) { case "add": HandleAdd(child, config); break; case "remove": HandleRemove(child, config); break; case "clear": HandleClear(child, config); break; default: throw ADP.ConfigUnrecognizedElement(child); } } config.AcceptChanges(); } return(config); }
// VSTFDevDiv # 624213: System.Data.Common.DbProviderFactories.GetFactoryClasses() still gets OracleClient provider in ClientSku environment. static private DataTable IncludeFrameworkFactoryClasses(DataTable configDataTable) { DataTable dataTable = DbProviderFactoriesConfigurationHandler.CreateProviderDataTable(); // NOTES: Adding the following Framework DbProviderFactories // <add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=%ASSEMBLY_VERSION%, Culture=neutral, PublicKeyToken=%ECMA_PUBLICKEY%"/> // <add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=%ASSEMBLY_VERSION%, Culture=neutral, PublicKeyToken=%ECMA_PUBLICKEY%"/> // <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=%ASSEMBLY_VERSION%, Culture=neutral, PublicKeyToken=%ECMA_PUBLICKEY%"/> // <add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=%ASSEMBLY_VERSION%, Culture=neutral, PublicKeyToken=%ECMA_PUBLICKEY%"/> Type sysDataType = typeof(System.Data.SqlClient.SqlClientFactory); string asmQualName = sysDataType.AssemblyQualifiedName.ToString().Replace(DbProviderFactoriesConfigurationHandler.sqlclientPartialAssemblyQualifiedName, DbProviderFactoriesConfigurationHandler.oracleclientPartialAssemblyQualifiedName); DbProviderFactoryConfigSection[] dbFactoriesConfigSection = new DbProviderFactoryConfigSection[(int)DbProvidersIndex.DbProvidersIndexCount]; dbFactoriesConfigSection[(int)DbProvidersIndex.Odbc] = new DbProviderFactoryConfigSection(typeof(System.Data.Odbc.OdbcFactory), DbProviderFactoriesConfigurationHandler.odbcProviderName, DbProviderFactoriesConfigurationHandler.odbcProviderDescription); dbFactoriesConfigSection[(int)DbProvidersIndex.OleDb] = new DbProviderFactoryConfigSection(typeof(System.Data.OleDb.OleDbFactory), DbProviderFactoriesConfigurationHandler.oledbProviderName, DbProviderFactoriesConfigurationHandler.oledbProviderDescription); dbFactoriesConfigSection[(int)DbProvidersIndex.OracleClient] = new DbProviderFactoryConfigSection(DbProviderFactoriesConfigurationHandler.oracleclientProviderName, DbProviderFactoriesConfigurationHandler.oracleclientProviderNamespace, DbProviderFactoriesConfigurationHandler.oracleclientProviderDescription, asmQualName); dbFactoriesConfigSection[(int)DbProvidersIndex.SqlClient] = new DbProviderFactoryConfigSection(typeof(System.Data.SqlClient.SqlClientFactory), DbProviderFactoriesConfigurationHandler.sqlclientProviderName, DbProviderFactoriesConfigurationHandler.sqlclientProviderDescription); for (int i = 0; i < dbFactoriesConfigSection.Length; i++) { if (dbFactoriesConfigSection[i].IsNull() == false) { bool flagIncludeToTable = false; if (i == ((int)DbProvidersIndex.OracleClient)) // OracleClient Provider: Include only if it installed { Type providerType = Type.GetType(dbFactoriesConfigSection[i].AssemblyQualifiedName); if (providerType != null) { // NOTES: Try and create a instance; If it fails, it will throw a System.NullReferenceException exception; System.Reflection.FieldInfo providerInstance = providerType.GetField(Instance, System.Reflection.BindingFlags.DeclaredOnly | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); if ((null != providerInstance) && (providerInstance.FieldType.IsSubclassOf(typeof(DbProviderFactory)))) { Debug.Assert(providerInstance.IsPublic, "field not public"); Debug.Assert(providerInstance.IsStatic, "field not static"); object factory = providerInstance.GetValue(null); if (null != factory) { flagIncludeToTable = true; } // Else ignore and don't add to table } // Else ignore and don't add to table } } else { flagIncludeToTable = true; } if (flagIncludeToTable == true) { DataRow row = dataTable.NewRow(); row[Name] = dbFactoriesConfigSection[i].Name; row[InvariantName] = dbFactoriesConfigSection[i].InvariantName; row[Description] = dbFactoriesConfigSection[i].Description; row[AssemblyQualifiedName] = dbFactoriesConfigSection[i].AssemblyQualifiedName; dataTable.Rows.Add(row); } // Else Ignore and do not include to table; } } // NOTES: Additional step added here to maintain the sequence order of the providers listed. // The Framework Providers get listed first and is followed the custom providers. for (int i = 0; (configDataTable != null) && (i < configDataTable.Rows.Count); i++) { try { bool flagIncludeToTable = false; // OracleClient Provider: Include only if it installed if (configDataTable.Rows[i][AssemblyQualifiedName].ToString().ToLowerInvariant().Contains(DbProviderFactoriesConfigurationHandler.oracleclientProviderNamespace.ToString().ToLowerInvariant())) { Type providerType = Type.GetType(configDataTable.Rows[i][AssemblyQualifiedName].ToString()); if (providerType != null) { // NOTES: Try and create a instance; If it fails, it will throw a System.NullReferenceException exception; System.Reflection.FieldInfo providerInstance = providerType.GetField(Instance, System.Reflection.BindingFlags.DeclaredOnly | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); if ((null != providerInstance) && (providerInstance.FieldType.IsSubclassOf(typeof(DbProviderFactory)))) { Debug.Assert(providerInstance.IsPublic, "field not public"); Debug.Assert(providerInstance.IsStatic, "field not static"); object factory = providerInstance.GetValue(null); if (null != factory) { flagIncludeToTable = true; } // Else ignore and don't add to table } // Else ignore and don't add to table } } else { flagIncludeToTable = true; } if (flagIncludeToTable == true) { // NOTES: If it already exist in the configTable, it raises a ConstraintException; dataTable.Rows.Add(configDataTable.Rows[i].ItemArray); } } catch (System.Data.ConstraintException) { // NOTES: Ignore item; Already exist in the configTable, hence the ConstraintException; Move to the next item; } } return(dataTable); }
private static DataTable IncludeFrameworkFactoryClasses(DataTable configDataTable) { DataTable table = DbProviderFactoriesConfigurationHandler.CreateProviderDataTable(); Type type3 = typeof(SqlClientFactory); string factoryAssemblyQualifiedName = type3.AssemblyQualifiedName.ToString().Replace("System.Data.SqlClient.SqlClientFactory, System.Data,", "System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient,"); DbProviderFactoryConfigSection[] sectionArray = new DbProviderFactoryConfigSection[] { new DbProviderFactoryConfigSection(typeof(OdbcFactory), "Odbc Data Provider", ".Net Framework Data Provider for Odbc"), new DbProviderFactoryConfigSection(typeof(OleDbFactory), "OleDb Data Provider", ".Net Framework Data Provider for OleDb"), new DbProviderFactoryConfigSection("OracleClient Data Provider", "System.Data.OracleClient", ".Net Framework Data Provider for Oracle", factoryAssemblyQualifiedName), new DbProviderFactoryConfigSection(typeof(SqlClientFactory), "SqlClient Data Provider", ".Net Framework Data Provider for SqlServer") }; for (int i = 0; i < sectionArray.Length; i++) { if (!sectionArray[i].IsNull()) { bool flag2 = false; if (i == 2) { Type type2 = Type.GetType(sectionArray[i].AssemblyQualifiedName); if (type2 != null) { FieldInfo field = type2.GetField("Instance", BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); if (((null != field) && field.FieldType.IsSubclassOf(typeof(DbProviderFactory))) && (field.GetValue(null) != null)) { flag2 = true; } } } else { flag2 = true; } if (flag2) { DataRow row = table.NewRow(); row["Name"] = sectionArray[i].Name; row["InvariantName"] = sectionArray[i].InvariantName; row["Description"] = sectionArray[i].Description; row["AssemblyQualifiedName"] = sectionArray[i].AssemblyQualifiedName; table.Rows.Add(row); } } } for (int j = 0; (configDataTable != null) && (j < configDataTable.Rows.Count); j++) { try { bool flag = false; if (configDataTable.Rows[j]["AssemblyQualifiedName"].ToString().ToLowerInvariant().Contains("System.Data.OracleClient".ToString().ToLowerInvariant())) { Type type = Type.GetType(configDataTable.Rows[j]["AssemblyQualifiedName"].ToString()); if (type != null) { FieldInfo info = type.GetField("Instance", BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly); if (((null != info) && info.FieldType.IsSubclassOf(typeof(DbProviderFactory))) && (info.GetValue(null) != null)) { flag = true; } } } else { flag = true; } if (flag) { table.Rows.Add(configDataTable.Rows[j].ItemArray); } } catch (ConstraintException) { } } return(table); }