【问题标题】:NullReferenceException when update database from datagridview从 datagridview 更新数据库时出现 NullReferenceException
【发布时间】:2011-12-12 18:59:48
【问题描述】:

我想在 Windows 窗体中编辑我的 datagridview,然后单击更新到数据库的“保存”按钮。

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#,而且还很新,所以不要对我苛刻。

【问题讨论】:

标签: c# oledb


【解决方案1】:

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

您可能需要让objAdapter 成为您班级的成员。将其声明从方法中拉出到类中。这应该让你至少接近一两步。

也有可能你确实有一个类级别 objAdapter 并且不小心在第一个处理程序中创建了第二个 - 但本地 - 一个。如果是这种情况,请更改此行

OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);

到这里:

objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);

【讨论】:

  • 很清楚,谢谢。在我更改此行后,它说我的值为空。 null 到底是什么意思?
  • null 表示您的变量未指向对象。变量本身实际上不是对象,但它引用它。如果它在您的第二个处理程序中为空,那么您的第二个处理程序可能在第一个处理程序之前运行?也许在你的类的构造函数中你应该创建 objAdapter?
  • 好的,我现在明白了。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 2015-05-20
相关资源
最近更新 更多