0

J'ai le code ci-dessous où je suis en train de mettre à jour une base de données de la C# vue sur la grille modification apportée à l'application windows ....SqlDataAdapter.Update (tableau de données) ne fonctionne pas (pas de mettre à jour la base de données)

Le code ne met pas à jour la base de données SQL Server. Je ne suis pas sûr d'où exactement le problème se produit. Ou y a-t-il un moyen de mettre à jour la table de base de données en utilisant "update query statement", le point est comment écrire l'instruction de mise à jour pour les changements de valeur dans la vue de grille de données?

Je suppose qu'il pourrait y avoir un problème avec la liaison et les instructions de commande de sélection ...

Quelqu'un pourrait-il me diriger dans la bonne direction pour résoudre ce problème?

public partial class KnowledgeBaseForm : Form 
{ 
    private SqlDataAdapter SDA = new SqlDataAdapter(); 
    private DataTable DT = new DataTable(); 

    private void button_retrievekb_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      con.Open(); 
      SqlDataAdapter SDA = new SqlDataAdapter(@"SELECT * From Table1", con); 

      SDA.Fill(DT); 

      bindingsource.DataSource = DT; 
      dataGridView.DataSource = bindingsource; 

      if (DT.Rows.Count > 0) 
      { 
       dataGridView.Columns[0].DefaultCellStyle.ForeColor = Color.Gray; 
       dataGridView.Columns[0].ReadOnly = true; 
      } 
      else 
      { 
       MessageBox.Show("No Knowledge Base Rules Found"); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error : " + ex.Message); 
     } 
     finally 
     { 
      con.Close(); 
     } 
    } 

    private void button_update_Click(object sender, EventArgs e) 
    { 
     if (MessageBox.Show("Do you really want to Update these values?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes) 
     { 
      //binding the datasource with the changes made in the gridview 
      bindingsource.DataSource = dataGridView.DataSource; 
      DT.AcceptChanges(); 
      scb = new SqlCommandBuilder(SDA);     
      SDA.Update((DataTable) bindingsource.DataSource); 
      MessageBox.Show("Updates successfully submitted to CoSD"); 
     } 
    } 
} 
+0

Déclarez votre objet DT dans la racine de la classe comme votre DataAdapter, et utiliser DT.AcceptChanges avant d'appeler SDA.Update, testez-le et laissez-nous maintenant si cela fonctionne –

+0

Salut. .. J'ai édité le code comme ce que vous avez dit ... mais ne fonctionnait toujours pas ... –

Répondre

1

Essayez ceci:

public partial class KnowledgeBaseForm : Form 
    { 
    SqlDataAdapter SDA = new SqlDataAdapter(); 
    DataTable DT = new DataTable(); 
    DataSet ds = new DataSet(); 
    private void button_retrievekb_Click(object sender, EventArgs e) 
      { 

       SDA = new SqlDataAdapter(@"SELECT * From Table1", con); 
       ds = new DataSet(); 
       SDA.fill(ds,"SomeName"); 
       dataGridView1.DataSource = ds.Tables[0]; 
      } 

    private void button_update_Click(object sender, EventArgs e) 
      { 


      if (MessageBox.Show("Do you really want to Update these values?", "Confirm Update", MessageBoxButtons.YesNo) == DialogResult.Yes) 
      { 
       SqlCommandBuilder builder = new SqlCommandBuilder(SDA); 
       SDA.Update(ds,"SomeNme"); 

      } 
      } 
    }