NullReference Exception C#
本文关键字:Exception NullReference | 更新日期: 2023-09-27 18:22:20
我得到以下未处理的异常
未处理NullReferenceException。对象引用未设置为对象的实例。
还有类似警告的东西
字段"Project3_MineSweeper.Form3.form2"从未分配给,并且其默认值始终为空
这是我的DB.cs 上的代码
public class DB
{
...
public DataTable GetData()
{
string spName = "GetTime";
Connection.Open();
SqlCommand command = new SqlCommand(spName, Connection);
command.CommandType = CommandType.StoredProcedure;
SqlDataReader reader = command.ExecuteReader();
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Score");
while (reader.Read())
{
DataRow dr = dt.NewRow();
dr["name"] = Convert.ToString(reader["name"]);
dr["timeScore"] = Convert.ToInt32(reader["timeScore"]);
dt.Rows.Add(dr);
}
Connection.Close();
return dt;
}
}
这是Form3.cs 的代码
public partial class Form3 : Form
{
//THE WARNING
private Form2 form2;
public Form3()
{
InitializeComponent();
loadData();
}
public void loadData()
{
//UNHANDLED EXCEPTION HERE
DataTable dt2 = form2.db.GetData();
dgvScore.DataSource = dt2;
}
}
最后Form2.cs
public partial class Form2 : Form
{
public DB db;
private Form3 form3;
public Form2()
{
db = new DB();
InitializeComponent();
}
...
}
怎么了?我该怎么做才能解决这个问题?
您永远不会初始化form2,这会导致此行出现空引用:
DataTable dt2=form2.db.GetData();
你应该做一些类似的事情
form2=新form2();
取决于你需要它的地方。
public partial class Form3 : Form
{
private Form2 form2; // <--- you never initialize form2
public Form3()
{
InitializeComponent();
loadData();
}
public void loadData()
{
//UNHANDLED EXCEPTION HERE
DataTable dt2 = form2.db.GetData();
dgvScore.DataSource = dt2;
}
}
public void loadData()
{
form2 = new Form2(); // add this line to init form2 before using
DataTable dt2 = form2.db.GetData();
dgvScore.DataSource = dt2;
}