2011-12-28 19 views
0

アダプターを使用して編集した後で、datagridviewをデータベースに更新することについてたくさんのことがありました。私は私に以下のような類似の例を与えたいくつかのウェブサイトを参照しました。しかし、私は私のbutton2_Clickの最初の行に "ArgumentNullExceptionが未処理"のエラーが発生しています。datagridviewからデータベースを更新する

私はプログラミングが初めてで、アダプターをグローバルとして宣言するよう教えられました。なぜ私はまだヌル値を得ているのですか?どんな助けもありがとう。ありがとうございました!

DataTable dt; 
DataSet ds; 
OleDbDataAdapter objAdapter = new OleDbDataAdapter(); 

public void button1_Click(object sender, EventArgs e) 
{ 
    //Bind button 
    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); 
    objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection); 
    DataSet ds = new DataSet(); 
    dataGridView1.DataSource = ds; 
    objAdapter.Fill(ds); 

    DataTable dt = ds.Tables[0]; 
    dataGridView1.DataSource = dt.DefaultView;   

    try 
    { 
     if (dt.Rows.Count == 1) 
     { 
      MessageBox.Show("Record found."); 
     } 
     else 
     { 
      if (dt.Rows.Count == 0) 
      { 
       MessageBox.Show("Invalid input!"); 
      } 
     } 
    } 
    catch 
    { 
     MessageBox.Show("Error!"); 
    } 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    objAdapter.Update(ds); 
    dataGridView1.DataSource = ds; 
} 

答えて

1

私はそれが単に異なるスコープの変数間の混乱だと思います。第2のbutton_clickで使用するdsは、グリッドにデータを設定するのに使用する同じデータセットではありません。それらにと同じインスタンスを作成してください。ほとんどの場合動作します。

編集

のでではなく

DataSet ds = new DataSet(); 
dataGridView1.DataSource = ds; 
objAdapter.Fill(ds); 
DataTable dt = ds.Tables[0];` 

の書き込みに十分この

ds = new DataSet(); 
dataGridView1.DataSource = ds; 
objAdapter.Fill(ds); 
DataTable dt = ds.Tables[0];` 
+0

どうすればそれらをまったく同じインスタンスにすることができますか?それは仕事をするグローバル変数にしないだろうか? – Daz

+0

@daz:私の編集後の記事を参照してください。 – Tigran

+0

ありがとうございます。今私は同じdsを指している。しかし、別のエラー "InvalidOperationExceptionが未処理"があります。 '更新には、変更された行を含むDataRowコレクションを渡すときに、有効なUpdateCommandが必要です。'というメッセージが表示されます。更新コマンドが無効なのはなぜですか?助けてください! – Daz

0

する必要があります作るために私は同じ問題が発生したため、私はこれを試みることによってそれを修正:

DataSet ds = new DataSet(); 
dataGridView1.DataSource = ds; 
objAdapter.Fill(ds); 
dataGridView1.DataSource = ds.Tables[0]; 
関連する問題