【问题标题】:Dynamic connection strings based on Production/Debug flag基于生产/调试标志的动态连接字符串
【发布时间】:2014-02-24 08:50:38
【问题描述】:

我正在编写一个基于 C# .NET 4.5 的 Windows 窗体应用程序。

我想在定义应用程序是否在生产调试模式下运行的类之一(可能是主窗体类)中设置一个标志(布尔值)。我将使用此标志来控制应用程序的各种操作,包括基于 GUI 的操作以及要使用的连接字符串。

我对基于 GUI 的东西没有问题,因为标志是在主窗体的类中定义的,但是连接字符串有问题。有一个单独的类用于 DB 访问,它基本上只是定义了一个像这样的常量:

namespace MyApp
{
    class DatabaseInterface
    {
        public static string MyConnectionString = "Data Source=server;Initial Catalog=db";
    }
}

我想根据生产/调试标志更改连接字符串(实际上只是“服务器”)。我不想在使用连接字符串的每个地方都放置一个 if/then/else(在调试字符串和生产字符串之间切换),但想要一个可以在整个应用程序中使用的单个命名连接字符串。我还希望不必实例化 DatabaseInterface 对象(我知道我可以在 DatabaseInterface 类的公共属性的“获取”定义中动态更改它)。

有没有办法做到这一点?

【问题讨论】:

  • 与其在代码中解决这个问题,不如考虑使用配置文件。如果您使用的是 Web 应用程序,则可以使用 Web 配置转换来指定调试和发布配置的外观(请参阅本文msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx)。如果没有,您可以创建 app.config 的调试和发布版本,并使用构建事件通过将正确的复制到 app.config 来选择要使用的版本。
  • 在这里查看有关 app.config 和转换的信息:stackoverflow.com/questions/3004210/…
  • 我们不能使用 app.config 因为不想向用户公开连接字符串。 App.configs 通常是纯文本,加密它们的方法似乎不可行。

标签: c# connection-string


【解决方案1】:

如果您想基于标志执行此操作并且不希望到处都有 if,我建议您使用这样的简单 getter:

namespace MyApp
{
    class DatabaseInterface
    {
        public static string getConnectionString()
        {
            return myFlag ? "Data Source=server;Initial Catalog=db" : "AnotherString";
        }
    }  
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 2018-12-08
    • 2012-08-12
    相关资源
    最近更新 更多