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); } } }
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); }
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); } } }