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);
        }
Esempio n. 3
0
            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);
            }
Esempio n. 4
0
            /*
             * 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);
        }