public void RefreshSetting()
        {
            DbProviderFactory        factory = null;
            ConnectionStringSettings cnnstr  = ConfigurationManager.ConnectionStrings[m_ConnectionStringName];

            try
            {
                factory = DbProviderFactories.GetFactory(cnnstr.ProviderName);
            }
            catch { }

            if (factory == null)
            {
                DataSet section = ConfigurationManager.GetSection(DB_PROVIDER_SECTION) as DataSet;
                if (section != null)
                {
                    DataTable tableFactory = section.Tables[DB_PROVIDER_FACTORY_TAG];
                    if (tableFactory != null)
                    {
                        foreach (DataRow row in tableFactory.Rows)
                        {
                            if (cnnstr.ProviderName.Equals(row["Name"]))
                            {
                                factory = DbProviderFactories.GetFactory(row);
                            }
                            if (factory != null)
                            {
                                break;
                            }
                        }
                    }
                }
            }

            if (factory != null && cnnstr != null)
            {
                // thread-safe (reads and writes of reference types are atomic)
                if (DataConfigHelper.DbConnectionStringLoader != null)
                {
                    string newCnnStr = DataConfigHelper.DbConnectionStringLoader.GetConnectionString(cnnstr.Name);
                    if (String.IsNullOrEmpty(newCnnStr))
                    {
                        newCnnStr = cnnstr.ConnectionString;
                    }
                    m_Config = new DbConnectionConfig(factory, new ConnectionStringSettings(cnnstr.Name, newCnnStr, cnnstr.ProviderName));
                }
                else
                {
                    m_Config = new DbConnectionConfig(factory, cnnstr);
                }
            }
        }
Exemple #2
0
        public IDbConnection OpenDbConnection()
        {
            // thread-safe (reads and writes of reference types are atomic)
            DbConnectionConfig config = m_Config;

            DbProviderFactory        factory = config.DbFactory;
            ConnectionStringSettings cnnstr  = config.CnnString;

            IDbConnection conn = null;

            if (factory != null && cnnstr != null)
            {
                conn = factory.CreateConnection();
                if (conn != null)
                {
                    conn.ConnectionString = cnnstr.ConnectionString;
                    conn.Open();
                }
            }

            return(conn);
        }
Exemple #3
0
        public void RefreshSetting()
        {
            DbProviderFactory        factory = null;
            ConnectionStringSettings cnnstr  = ConfigurationManager.ConnectionStrings[m_ConnectionStringName];

            try
            {
                //factory = DbProviderFactories.GetFactory(cnnstr.ProviderName);
                factory = DbHelperFunc.GetDbProviderFactory(cnnstr.ProviderName);
            }
            catch { }

            if (factory == null)
            {
                /*
                 * DataSet section = ConfigurationManager.GetSection(DB_PROVIDER_SECTION) as DataSet;
                 * if (section != null)
                 * {
                 *  DataTable tableFactory = section.Tables[DB_PROVIDER_FACTORY_TAG];
                 *  if (tableFactory != null)
                 *  {
                 *      foreach (DataRow row in tableFactory.Rows)
                 *      {
                 *          if (cnnstr.ProviderName.Equals(row["Name"]))
                 *          {
                 *              //factory = DbProviderFactories.GetFactory(row);
                 *              factory = DbHelperFunc.GetDbProviderFactory(row["Name"].ToString());
                 *          }
                 *          if (factory != null) break;
                 *      }
                 *  }
                 * }
                 */

                try
                {
                    string folder = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
                    if (folder == null || folder.Trim().Length <= 0)
                    {
                        var entry    = Assembly.GetEntryAssembly();
                        var location = "";
                        try
                        {
                            if (entry != null)
                            {
                                location = entry.Location;
                            }
                        }
                        catch { }
                        if (location != null && location.Length > 0)
                        {
                            folder = Path.GetDirectoryName(location);
                        }
                    }
                    if (folder == null || folder.Trim().Length <= 0)
                    {
                        folder = "";
                    }

                    XmlDocument xmlDoc = new XmlDocument();

                    var configFilepath = folder + "/" + AppDomain.CurrentDomain.FriendlyName;

                    if (File.Exists(configFilepath + ".exe.config"))
                    {
                        configFilepath += ".exe.config";
                    }
                    else if (File.Exists(configFilepath + ".dll.config"))
                    {
                        configFilepath += ".dll.config";
                    }
                    else
                    {
                        configFilepath += ".config";
                    }

                    xmlDoc.Load(configFilepath);

                    foreach (var ele in xmlDoc.DocumentElement)
                    {
                        XmlElement element = ele as XmlElement;
                        if (element != null && element.Name.Equals("system.data"))
                        {
                            foreach (XmlNode node in element.ChildNodes)
                            {
                                if (node.Name.Equals("DbProviderFactories"))
                                {
                                    foreach (XmlNode subnode in node.ChildNodes)
                                    {
                                        if (subnode.Name.Equals("add"))
                                        {
                                            var attrItem     = subnode.Attributes.GetNamedItem("name") as XmlAttribute;
                                            var providerName = attrItem == null ? "" : attrItem.Value;
                                            if (cnnstr.ProviderName.Equals(providerName))
                                            {
                                                //factory = DbProviderFactories.GetFactory(row);

                                                attrItem = subnode.Attributes.GetNamedItem("invariant") as XmlAttribute;
                                                var providerClass = attrItem == null ? providerName : attrItem.Value;

                                                factory = DbHelperFunc.GetDbProviderFactory(providerClass);
                                            }
                                            if (factory != null)
                                            {
                                                break;
                                            }
                                        }
                                    }
                                }
                                if (factory != null)
                                {
                                    break;
                                }
                            }
                        }
                        if (factory != null)
                        {
                            break;
                        }
                    }
                }
                catch { }
            }

            if (factory != null && cnnstr != null)
            {
                // thread-safe (reads and writes of reference types are atomic)
                if (DataConfigHelper.DbConnectionStringLoader != null)
                {
                    string newCnnStr = DataConfigHelper.DbConnectionStringLoader.GetConnectionString(cnnstr.Name);
                    if (String.IsNullOrEmpty(newCnnStr))
                    {
                        newCnnStr = cnnstr.ConnectionString;
                    }
                    m_Config = new DbConnectionConfig(factory, new ConnectionStringSettings(cnnstr.Name, newCnnStr, cnnstr.ProviderName));
                }
                else
                {
                    m_Config = new DbConnectionConfig(factory, cnnstr);
                }
            }
        }