我在Google和Stack Overflow上搜索了我遇到的问题。不幸的是,我找不到正确的答案。
首先,我会展示我的类和App.config文件。
类: Form1 : Form
public partial class Form1 : Form
{
Database db = new Database();
public Form1()
{
InitializeComponent();
db.Test();
}
private void Form1_Load(object sender, EventArgs e)
{
db.MdfConnectionString = ConfigurationManager.ConnectionStrings["MDFConnection"].ConnectionString;
}
}
类: 数据库
class Database
{
private string _mdfConnectionString;
public string MdfConnectionString
{
get { return this._mdfConnectionString; }
set { this._mdfConnectionString = value; }
}
public void Test()
{
MessageBox.Show(_mdfConnectionString);
}
App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="MDFConnection" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|Database\AutoFill.mdf;Integrated Security=True;ApplicationIntent=ReadOnly" providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
在我的类Database.cs中,我有一个MessageBox.Show(_mdfConnectionString);会显示私有字符串(备份字段),但是由于某种奇怪的原因_mdfConnectionString总是为空。
在我的类Form1:Form中声明需要加载App.config中的连接字符串。
不要忘记提到ConfigurationManager.ConnectionStrings["MDFConnection"].ConnectionString;本身返回一个值,所以这里不是问题。
希望有人能帮助我解决这个问题。 编辑1 更改了代码以使其更清晰易懂。ExecuteQuery并不重要,所以我在Database.cs类中创建了一个简单的方法来调用消息框。
同时,可执行文件和Exe.config位于同一文件夹中执行。
public string MdfConnectionString { get; set; }
自动实现属性是需要学习的第一件事情 - 您可以摆脱字段声明,并将属性重写为public string MdfConnectionString { get; set; }
。 - Jon SkeetForm1_Load
方法是否真正被调用了?你是否检查了它是否已经正确连接到事件?或者你是不是在表单加载完成之前就使用了db
? - Jon SkeetConfigurationManager
一起,并且没有直接使用Properties.Settings.Default.ConnectionString
。我们可以将连接字符串作为连接字符串类型的设置,通过项目属性中的设置选项卡进行管理。 - Thorsten Dittmar