【问题标题】:Connection string based on Location C#基于位置 C# 的连接字符串
【发布时间】:2013-10-06 00:08:09
【问题描述】:

我有两个不同的公司将使用的一个应用程序。我不想创建两个单独的应用程序,因为当我需要修复错误时,我必须在两个应用程序上都这样做,我可能会迷失方向。

与两家公司唯一不同的是域和数据库(连接字符串),换句话说,它们是独立的网络。如何让应用程序根据用户使用它的位置使用正确的连接字符串?例如,公司 A 或公司 B。我正在考虑使用文本或 .ini 文件来存储连接字符串。

有人可以帮忙或提出类似的建议吗?

提前致谢

【问题讨论】:

  • 您是否需要根据用户从同一台机器连接到两个数据库,或者一台机器将始终连接到同一个数据库?
  • @Steve 一台机器,一个数据库。换句话说,位置 A :所有用户都将连接到一个数据库。
  • @Werner van den Heever 您能否清除此声明“基于位置/域或其他...”问题是何时或基于什么条件您想要更改连接字符串?不清楚。
  • @Rezoan 我已经编辑了我的问题。希望我把事情弄清楚了
  • @WernervandenHeever 也许你可以创建一个帮助类来根据公司解析你的连接字符串?

标签: c# connection-string app-config ini


【解决方案1】:

也许这可以帮助你:

登录页面最好使用下拉选择公司与用户进行映射。 并且根据用户和公司映射,您可以选择连接字符串。 使用 if else 子句。

【讨论】:

  • 是的,我已经考虑过了,但这不是我想要的方式。谢谢
【解决方案2】:

我认为您可以尝试使用第一个连接字符串连接到数据库。如果失败,请使用其他字符串。这种方法可能会出现一些意想不到的问题。

【讨论】:

  • 不错的主意。虽然我认为仍然不是正确的方式。此外,未来可能会增加更多公司。
【解决方案3】:

好吧,假设两家公司的每台机器都属于不同的域(应该是),那么您可以使用检索域名

Environment.UserDomainName

然后动态构建连接字符串,例如在应用程序启动时

static class Program
{
     public static string CompanyConnectionString;

     static void Main()
     {
          string domain = Environment.UserDomainName;
          SqlConnectionStringBuilder sbc = new SqlConnectionStringBuilder();
          if(domain == "CompanyA")
          {
               sbc.DataSource = "ServerForComapanyA";
               sbc.InitialCatalog = "DataBaseCompanyA";
               ... etc ... 
               ... other properties of class SqlConnectionStringBuilder ...
               ... to exactly compose the connection string required
          }
          else if(domain == "CompanyB")
          {
               sbc.DataSource = "ServerForComapanyB";
               sbc.InitialCatalog = "DataBaseCompanyB";
               ... etc ... 
               ... other properties of class SqlConnectionStringBuilder ...
               ... to exactly compose the connection string required
          }
          else
          {
               MessabeBox.Show("Machine domain name not recognized. Unable to connect");
          }
          Program.ConnectionString = sbc.ConnectionString;
          ....

现在程序的每个类都可以引用启动类并使用Program.CompanyConnectionString
当然,这项工作也可以转移到实用程序类来解决对主类的依赖

SqlConnectionStringBuilder
Environment.UserDomainName

刚刚意识到我不知道你是否使用 Sql Server,但 ConnectionBuilder 类也可用于 OleDb、Odbc、Oracle 并且可能所有其他主要提供商都有相同的

【讨论】:

    【解决方案4】:

    使用 app.config。在部署时在构建脚本中更新 app.config 中的连接字符串,具体取决于部署将发送给谁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-22
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多