基于位置C#的连接字符串

时间:2013-09-30 07:45:01

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

我有一个应用程序,两个不同的公司将使用。我不想创建两个单独的应用程序,因为当我需要修复错误时,必须在两者上执行它,我可能会松开轨道。

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

有人可以帮助或建议同类的东西吗?

提前致谢

4 个答案:

答案 0 :(得分:0)

可能这可以帮到你:

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

答案 1 :(得分:0)

我认为你可以尝试使用第一个连接字符串连接到DB。如果失败,请使用另一个字符串。这种方法可能存在一些意想不到的问题。

答案 2 :(得分:0)

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

检索域名。
Environment.UserDomainName

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

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以及可能每个其他主要提供商都有相同的

答案 3 :(得分:0)

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