我已经在Google和Stack Overflow上搜索了我遇到的这个问题。 很遗憾,我无法找到问题的正确答案。
首先,我将展示我的Classes和App.config。
分类:Form1:表单
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:表单上声明它需要在我的App.config中加载连接字符串。
不要忘记提及 ConfigurationManager.ConnectionStrings [&#34; MDFConnection&#34;]。ConnectionString; 本身会返回一个值,因此这里不是问题。
希望有人可以帮我解决这个问题。
编辑1
更改了代码,使人们更清楚。 ExecuteQuery也不重要,所以我在Database.cs类中创建了一个调用消息框的简单方法。
执行时,Executable和Exe.config也位于同一文件夹中。
答案 0 :(得分:3)
我没有确切的答案,但在同样的情况下我会问自己几个问题。
连接字符串是否实际获得?即将解决方案分解一点以便调试在myConn上添加断点,如下所示。
private void Form1_Load(object sender,EventArgs e) {
var myConn = ConfigurationManager.ConnectionStrings [&#34; MDFConnection&#34;]。ConnectionString; db.MdfConnectionString = myConn;
}
您设计的当前解决方案允许在没有连接字符串的情况下使用datatbase类。将连接放入构造函数以消除潜在的错误会更好吗? E.g。
公共类数据库 {
private string _mdfConnectionString;
公共数据库(字符串连接)
{
_mdfConnectionString = conn;
}
...
}
然后,您可能希望在表单加载上构建它。
编辑 - 在编辑之后,我相信您现在在表单加载之前调用Test。请尝试第2点(将连接字符串注入构造函数),然后您知道没有连接字符串就没有该类的实例。我已经在一个控制台中尝试了你的课,它很好,所以问题很可能是加载顺序。 DI会解决这个问题。
答案 1 :(得分:0)
该方法何时被调用? Yust在构造函数中查找它喜欢的代码,在构造函数中初始化字符串:
public Form1()
{
db.MdfConnectionString = ConfigurationManager.ConnectionStrings["MDFConnection"].ConnectionString;
InitializeComponent();
}
答案 2 :(得分:0)
Form1:表单
public partial class Form1 : Form
{
Database db = new Database();
public Form1()
{
InitializeComponent();
//db.Test(); // Removed!
}
private void Form1_Load(object sender, EventArgs e)
{
db.MdfConnectionString = ConfigurationManager.ConnectionStrings["MDFConnection"].ConnectionString;
db.Test(); // Returns a value! :D
}
}
似乎我在加载表单之前加载了我的方法。