【问题标题】:Change connection string at runtime MySql C#在运行时更改连接字符串 MySql C#
【发布时间】:2016-07-04 03:04:00
【问题描述】:

我有一个 app.config 文件,其中包含我的数据库的连接字符串。 我想做的是连接到不同的数据库,这就是我习惯使用这段代码的原因:

 connectionString = "Data Source=blah;Initial Catalog=blah;UID=blah;password=blah";
        var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        var connectionStringsSection = (ConnectionStringsSection)config.GetSection("connectionStrings");
        connectionStringsSection.ConnectionStrings[nameofConnectionString].ConnectionString = connectionString;
        config.Save();
        ConfigurationManager.RefreshSection(nameofConnectionString);

效果很好,它改变了连接字符串,但问题是它向我发送了一条错误消息“facerec6.0.cdcol 不存在”

我的默认初始目录 = facerec6.0

我会怎么做?

【问题讨论】:

    标签: c# mysql configuration


    【解决方案1】:

    ConnectionStringSection 只是一个存储命名连接字符串的容器。如果您想连接到不同的数据库,那么最好从一开始就将这些不同的连接字符串存储在该部分中,然后确定您的应用程序将如何选择在运行时使用哪一个。

    仅考虑该部分,仅此而已 - 它是一个方便且已知的存储连接字符串的位置,并以标准方式检索它们。处理代码的其他开发人员将知道在哪里查找它们并知道如何检索它们。

    尽管技术上可以在运行时修改该部分并保存文件,但我不会这样做。如果您有相同的代码,在相同的环境中运行时可能使用不同的连接字符串(不是一个用于开发,一个用于 QA,一个用于生产),那么您可以让您的类依赖于类似这样的接口:

    public interface IConnectionStringFactory
    {
        string GetConnectionString(Something key);
    }
    

    其中Something 是需要连接字符串的类可以传递给工厂的值,工厂可以使用它来确定要检索哪个连接字符串。这样,使用连接字符串的类与该逻辑绝缘。它不知道为什么它使用一个或另一个连接字符串。它只是从工厂获取一个连接字符串,然后使用它。

    如果是根据环境改变连接字符串的情况,那么这要容易得多 - 您可以使用 config transforms 来做到这一点。在大多数情况下,如果环境不同,那么所有每个环境的连接字符串都会不同,因此您可以替换整个部分。

    <connectionStrings xdt:Transform="Replace">
        <add name="connectionStringA" connectionString="...whatever..." />
    </connectionStrings>
    

    【讨论】:

    • 如果这是答案,请不要忘记将其标记为已回答。谢谢
    【解决方案2】:

    请试试这个:

    ConfigurationManager.RefreshSection("connectionStrings");
    

    因为:

    <connectionStrings> <- this is the section
       <add name="facerec6.0"/> <- this is the element
       <add ... />
    </connectionStrings>
    

    使用RefreshSection时需要刷新部分,而不是元素。

    【讨论】:

    • 我已经按照你说的做了,但它给了我一个例外“表'facerec6.0.cdcol不存在'”
    • 我认为这是一个不同的错误。你能检查一下'facerec6.0.cdcol是否存在于你的配置文件的连接字符串部分吗?
    猜你喜欢
    • 2017-11-17
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多