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();
        }
     ...
}

怎么了?我该怎么做才能解决这个问题?

NullReference Exception C#

您永远不会初始化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;
}