2017-10-24 11 views
2

私は追加するセクションと削除するセクションが2つあるフォームを持っています。 enter image description here しかし、問題は私がデータを追加した後、私がちょうど追加したもの以外のすべての以前のデータを見ることができるセクションを削除するに関連付けられているコンボボックスをチェックするときです。だから私は最新のデータが表示されませんが、私は追加ボタンをクリックするとすぐにコンボボックスにすべてを取得し、最新のものにいくつかの種類のソリューションが必要です。C#Oledbアプリケーションのデータ更新

追加ボタンのためのコード:

private void btnAddSubj_Click(object sender, EventArgs e) 
    { 
     OleDbDataReader cmd = ad.select("SELECT TOP 1 ID FROM subjects WHERE ID = " + int.Parse(txtSubjID.Text)); 
     if (cmd.Read()) 
     { 
      MessageBox.Show("Subject ID you entered is taken, please select a different one"); 
     } 
     else 
     { 
      ad.insert("insert into subjects (`ID`,`subjectName`) values(" + int.Parse(txtSubjID.Text) + ",'" + txtSubjName.Text + "')"); 

     } 
     populateComboBoxSubjName(); 
    } 

ここで広告が、私が作成したクラスに関連付けられていると挿入のためのすべてのメソッドが含まれ、選択、削除、更新されます。 populateComboBoxSubjNameため

コード:

private void populateComboBoxSubjName() 
    { 
     comboBoxSubjName.Items.Clear(); 
     OleDbDataReader cmd = ad.select("SELECT * FROM subjects"); 

     while (cmd.Read()) 
     { 
      for (int f = 0; f < cmd.FieldCount; f+=2) 
      { 
       string data = (cmd.GetValue(f).ToString() + "-" + cmd.GetValue(f + 1).ToString()); 
       comboBoxSubjName.Items.Add(data); 
      } 
     } 
    } 

ボタン削除コード:

private void btnDeleteSubj_Click(object sender, EventArgs e) 
    { 
     string selected = this.comboBoxSubjName.GetItemText(this.comboBoxSubjName.SelectedItem); 
     string[] idToDelete = selected.Split('-'); 
     ad.delete("DELETE FROM subjects WHERE ID=" + int.Parse(idToDelete[0])); 
    } 
+0

あなたは 'bt、DeleteSbj_Click()'も表示できますか? – Wndrr

+0

@Wndrrがコードを追加しました –

+0

SQLインジェクションとフォーマットの問題を避けるためにパラメータを使用してください。読み込み中のforループは必要ないと思われます。将来はフィールドの位置が変更される可能性があるため、インデックスの代わりにフィールド名を使用する必要があります。 – LarsTech

答えて

0
私は別のクラスを使用して、SQLクエリを実行しようとしていた

(私は1つを作成し、さまざまな方法で、すべてのクエリとの接続をコード化それぞれの好きな挿入、削除、選択)ので、私は何度も何度も何度も何度も書き直す必要がありませんでした。私は何度も何度も何度も書かなければなりませんでした。

関連する問題