2011-12-12 141 views
1

我想在窗體中編輯我的datagridview並單擊更新到數據庫的「保存」按鈕。NullReferenceException從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#,而且還是很新的,所以不要苛刻我。

+0

可能重複(http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net) –

+1

這裏有一個提示:我敢打賭它不是一樣的'objAdapter'。一個是類成員,另一個是局部變量。 –

回答

1

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

您可能需要讓objAdapter成爲您班級的成員。把它的聲明從課堂上講出來。這應該讓你至少有一兩步。

也有可能你有一個職業等級objAdapter,並且意外地在第一個處理程序中做了第二個 - 但是本地的 - 。如果是這樣的情況下,改變這一行

OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection); 

此:?什麼是.NET一個NullReferenceException]的

objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection); 
+0

很清楚,謝謝。我改變這一行後,它說我的值爲空。它真的意味着什麼? –

+0

null表示您的變量未指向某個對象。變量本身並不是實際的對象,而是指向它。如果它在第二個處理程序中爲空,那麼第二個處理程序可能在第一個處理程序之前運行?也許在你的類的構造函數中你應該創建objAdapter? –

+0

對,我現在明白了。非常感謝! –

相關問題