我需要能够在用户选择时动态切换连接字符串(在登录期间通过单选按钮)。 我确实有连接字符串,这不是问题。由于上述原因,它无法进入app.config。
那说,我想如果我能在表单中找到强类型表适配器,我可以通过编程方式切换连接字符串。但我无法找到它。
我查看了这篇文章并没有给我带来任何有用的东西。 C# Reflection. Set TableAdapter ConnectionString
这会有什么想法吗?它不是控件集合,它不在Me.GetType()。GetMethods()中,而不在Me.GetType()。GetProperties。
每个请求添加了一些代码,不确定这有多大帮助。这是在登录时设置的。
If frmPreferences.InProd Then
GConnectString = "DATA SOURCE=xxx;PASSWORD=" & Password & ";USER ID=" & userName & ";"
Else
GConnectString = "DATA SOURCE=xxx;PASSWORD=" & Password & ";USER ID=" & userName & ";"
End If
以下是一些其他代码,它允许我在运行时设置配置字符串,但它适用于每个tableadapter。
Me.INSTITUTIONSTableAdapter.Connection.ConnectionString = GConnectString
Me.INVOICESTableAdapter.Connection.ConnectionString = GConnectString
欢迎任何建议。目的是不重构100多个数据集和500个表单。如果我需要对每个数据集进行一些小改动,那么删除所有数据集并按照某人的建议以编程方式执行所有操作都是不可行的(可能需要几年时间)。 / p>
答案 0 :(得分:0)
看起来这已经解决,解决方案是在内存中修改app.config文件,然后重新加载它。当应用程序首次启动时,根据用户是在prod还是dev中,它会执行以下操作:
If frmPreferences.InProd Then
GConnectString = "DATA SOURCE=xxx;PASSWORD=" & Password & ";USER ID=" & userName & ";"
Else
GConnectString = "DATA SOURCE=xxx;PASSWORD=" & Password & ";USER ID=" & userName & ";"
End If
Dim config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Dim connectionStringsSection = CType(config.GetSection("connectionStrings"), ConnectionStringsSection)
connectionStringsSection.ConnectionStrings("RADS.My.MySettings.RPCOracleConn").ConnectionString = GConnectString
config.Save()
ConfigurationManager.RefreshSection("connectionStrings")
底部代码来自SO帖子:Change connection string & reload app.config at run time
我仍然有点担心两个用户启动相同的EXE,但我会弄清楚。