NullReferenceException при обновлении базы данных из datagridview - PullRequest
1 голос
/ 12 декабря 2011

Я хочу отредактировать свое представление данных в форме Windows и нажать кнопку "Сохранить", чтобы обновить базу данных.

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 # и все еще очень новый, так что не будь груб со мной.

1 Ответ

1 голос
/ 12 декабря 2011

Вы определили objAdapter локально в вашем первом обработчике кнопок. Так что обработчик второй кнопки даже не знает, что он существует. Код, который вы разместили, не должен компилироваться. Это действительно ваш код или его приближение?

Возможно, вам потребуется сделать objAdapter членом вашего класса. Вытащите это объявление из методов в класс. Это должно сделать вас хотя бы на шаг или два ближе.

Также возможно, что у вас есть уровень класса objAdapter и случайно сделан второй - но локальный - один внутри первого обработчика. Если это так, измените эту строку

OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);

к этому:

objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);
...