从datagridview更新数据库时出现NullReferenceException

本文关键字:NullReferenceException 数据库 datagridview 更新 | 更新日期: 2023-09-27 18:17:51

我想在windows窗体中编辑我的datagridview,然后点击"Save"按钮更新到数据库。

public void button1_Click(object sender, EventArgs e)
{
    string txt = textBox1.Text;
    string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:''Project.mdb";
    string strSqlStatement = string.Empty;
    strSqlStatement = "SELECT * FROM jiahe WHERE [User] = '" + txt + "'";
    OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString);
    OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);
    DataSet ds = new DataSet();
    objAdapter.Fill(ds);
    DataTable dt = ds.Tables[0];
    dataGridView1.DataSource = dt.DefaultView;
    try
    {
        if (dt.Rows.Count == 1)
        {
            string strLine = string.Empty;
            string strUser = string.Empty;
            foreach (DataRow dr in dt.Rows)
            {
                string strTags = dr["Tag ID"].ToString();
                strUser = dr["User"].ToString();
                string strAge = dr["Age"].ToString();
                string strPhoneNumber = dr["Phone Number"].ToString();
                DataTable dataTable = new DataTable();
                string updateString = @"update jiahe set Age = ' " + strAge + " ' where [User] = '" + textBox1.Text + "'";
                OleDbCommand cmd1 = new OleDbCommand(updateString, objConnection);
                cmd1.Connection.Open();
                string str = cmd1.ExecuteNonQuery().ToString();
                cmd1.Connection.Close();
            }
        }
        else
        {
            if (dt.Rows.Count == 0)
            {
                MessageBox.Show("Invalid input!");
            }
        }
    }
    catch (Exception)
    {
        MessageBox.Show("Error!");
    }
}

我的"保存"按钮:

private void button2_Click(object sender, EventArgs e)
{
    try
    {
        objAdapter.Update(dt);
    }
    catch (Exception exx)
    {
        MessageBox.Show(exx.ToString());
    }
}

当我点击保存时,我在objAdapter.Update(dt);有"对象引用未设置.."错误。请告诉我我错过了什么。我正在自学c#,而且还是新手,所以请不要对我太苛刻。

从datagridview更新数据库时出现NullReferenceException

您已经在第一个按钮处理程序中本地定义了objAdapter。第二个按钮处理器甚至不知道它的存在。你发布的代码不应该编译。这真的是你的代码还是它的近似值?

您可能需要使objAdapter成为您的类的成员。将它的声明从方法中拉出到类中。这样至少能让你离目标更近一两步。

也有可能你确实有一个类级别objAdapter,并意外地在第一个处理程序中创建了第二个-但局部-一个。如果是这种情况,修改这一行

OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);

:

objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);