类库连接字符串混淆

时间:2014-02-16 10:20:11

标签: c# winforms

我设法让自己感到困惑......我知道并不困难,我正在寻找一些指导......

我已经编写了一个dll,我现在开始在Winforms UI中使用它。

这是对此的后续问题:

Class Libray Connection String - How to change?

正如那篇文章所述,我已经在dll中将app.config中相同的连接字符串设置添加到我的UI中的App.config中。

在我的用户界面中,我有一个文本框,用户可以在其中输入连接字符串并点击“保存”,它运行以下代码:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.ConnectionStrings.ConnectionStrings["TPAPI.Properties.Settings.TruePotentialConnectionString"].ConnectionString = txtConnectionString.Text;
config.Save(ConfigurationSaveMode.Modified, true);
ConfigurationManager.RefreshSection("connectionStrings");

这似乎正确地更新了文件中的字符串。

但是,这就是以前的帖子让我困惑的地方......

该设置仅在软件启动时被读取。不知怎的,我需要改变Belogix解释的设置,我应该这样做:

var connectionString = "Data Source=MegaServer;Initial Catalog=MyDb; .. etc ..";
using (var db = new MyDataContext(connectionString))
{
   // This will connect to MegaServer...
}

但是,我正在调用我的dll中的函数:

List<Page> pages = Database.getlistOfPagesToScan();

如何告诉该调用开始使用UI的App.config中新保存的连接字符串?

任何人都可以放弃任何光明吗?

由于

2 个答案:

答案 0 :(得分:1)

您应该从dll中的设置获取连接字符串。您的答案实际上就在您发布的问题中。

使用此:

var connectionString = config.ConnectionStrings.ConnectionStrings["TPAPI.Properties.Settings.TruePotentialConnectionString"].ConnectionString;

您也可以使用:

string s = Properties.Settings.Default.ConnectionStr;
Console.WriteLine("Connection string from main app: " + s);

//
// When setting access modifier on Class library to `public`
//
s = ClassLibrary1.Properties.Settings.Default.ConnectionStr;
Console.WriteLine("Connection string from dll: " + s);

答案 1 :(得分:0)

假设您使用ConfigurationManager检索应用程序连接字符串,请尝试:

ConfigurationManager.RefreshSection("connectionStrings");