2017-09-23 48 views
0

我需要能够在用户选择它时动态地切换连接字符串(在登录期间通过单选按钮)。 我确实有连接字符串,这不是问题。由于上面的原因,它无法进入app.config。如何在窗体中识别强类型tableAdapter

这就是说,我认为如果我可以在表单中找到强类型的表格适配器,我可以通过编程方式切换连接字符串。但我找不到它。

我看了这篇文章,并没有让我觉得有用。 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个表单。如果我需要对每个数据集进行一些细微的更改,但是将所有数据集进行垃圾处理并按照某人的建议以编程方式执行所有操作(这可能需要几年的时间)并不可行。

+0

使用连接类... – Codexer

+0

您可以共享在连接之间切换的代码吗? –

+0

最近有人问到与此非常相似的东西,但令人沮丧的是我无法找到它。但是,最好在代码中创建数据集和表适配器,理想情况是在数据访问层中创建数据集和表适配器,而不是依赖于设计人员将其添加到表单中。这样你就可以很容易地改变tableadapter上的连接了。 – peterG

回答

0

它看起来像这样已解决,解决方案是在内存中修改app.config文件,并重新加载它。当应用程序第一次启动,这取决于用户是否在督促或开发者,它这样做:

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,但我会弄清楚。