我有两个不同公司将使用的一个应用程序。我不想创建两个单独的应用程序,因为当我需要修复错误时,我必须在两者上都这样做,我可能会失去轨道。
与两家公司唯一不同的是域和数据库(连接字符串),换句话说就是独立的网络。如何让应用程序根据用户使用它的位置使用正确的连接字符串?例如,公司 A 或公司 B。我正在考虑使用文本或 .ini 文件来存储连接字符串。
有人可以帮忙或建议类似的东西吗?
提前致谢
我有两个不同公司将使用的一个应用程序。我不想创建两个单独的应用程序,因为当我需要修复错误时,我必须在两者上都这样做,我可能会失去轨道。
与两家公司唯一不同的是域和数据库(连接字符串),换句话说就是独立的网络。如何让应用程序根据用户使用它的位置使用正确的连接字符串?例如,公司 A 或公司 B。我正在考虑使用文本或 .ini 文件来存储连接字符串。
有人可以帮忙或建议类似的东西吗?
提前致谢
可能这可以帮助你:
最好使用下拉菜单在登录页面上选择公司以与用户映射。并且根据用户和公司映射,您可以选择连接字符串。使用 if else 子句。
好吧,假设两家公司的每台机器都属于不同的域(应该是),那么您可以使用检索域名
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 并且可能每个其他主要提供商都有相同的
我认为您可以尝试使用第一个连接字符串连接到数据库。如果失败,请使用其他字符串。这种方法可能会出现一些意想不到的问题。
使用 app.config。在部署时的构建脚本中,根据部署将被运送到谁来更新 app.config 中的连接字符串。