簡體   English   中英

從datagridview更新數據庫時發生NullReferenceException

[英]NullReferenceException when update database from datagridview

我想在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#,但仍然很新,所以不要對我苛刻。

您已經在第一個按鈕處理程序中本地定義了objAdapter 因此,第二個按鈕處理程序甚至都不知道它的存在。 您發布的代碼不應編譯。 這真的是您的代碼還是它的近似值?

您可能需要使objAdapter成為您的類的成員。 將其聲明從方法中拉出到類中。 那應該使您至少接近一兩個步驟。

也有可能您確實擁有一個類級別的objAdapter並且意外地在第一個處理程序中創建了第二個(但本地的)第二個。 如果是這種情況,請更改此行

OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);

對此:

objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM