2010-01-10 3 views
1

Je suis un programmeur de programmation DB. J'ai besoin de remplir un DB à partir de champs de textbox mais quand j'essaye de le commettre à DB, je vais regarder la base de données et tout ce que je vois est Nulls ... rien n'est sauvé ... aide svp ..Le jeu de données ne s'engage pas dans la base de données

grâce

private void btnSubmit_Click(object sender, EventArgs e) 
    { 
     TradesDataSet.TradesRow newTradesRow = tradesDataSet.Trades.NewTradesRow(); 

     newTradesRow.ID = textBoxTradeID.Text; 
     newTradesRow.EntryPrice = textBoxEntryPrice.Text; 
     newTradesRow.ExitPrice = textBoxExitPrice.Text;    

     tradesDataSet.Trades.Rows.Add(newTradesRow); 
     tradesDataSet.Trades.AcceptChanges(); 

     try 
     { 

      this.Validate(); 
      this.tradesBindingSource.EndEdit(); 
      this.tradesTableAdapter.Update(this.tradesDataSet.Trades);     
      MessageBox.Show("Update successful"); 
     } 
     catch (System.Exception ex) 
     { 
      MessageBox.Show("Update failed"); 
     } 
    }   
+0

Pourquoi vous définissant explicitement l'ID d'une zone de texte? Ne devrait-il pas s'agir d'un champ auto-incrémenté défini par la base de données? – mpen

+0

Oui. Je veux finir par faire ça. Je ne peux même pas obtenir quoi que ce soit d'enregistrer dans la base de données en premier ... – Woody

+1

Astuce: DataSets est le meilleur moyen de créer une application pilotée par base de données. J'ai été là, j'ai essayé, et il y a tellement d'inconvénients ... il y a une façon plus simple et plus efficace de traiter les transactions de base de données en utilisant le nom de domaine System.Data.SqlClient. il est plus facile de cotrolier les acions et d'utiliser des procédures stockées avec des paramètres, de faire des transactions sql, d'obtenir des daa de la base de données, etc ... vous devriez lire à ce sujet. – GxG

Répondre

7

Supprimer l'appel AcceptChanges. La méthode Update de l'adaptateur de données examine les modifications dans la base de données et utilise la liste de modifications pour mettre à jour la base de données réelle. Il accepte automatiquement les modifications dans le DataSet après la mise à jour. Si vous appelez AcceptChanges manuellement sur le DataSet avant la mise à jour, le DataAdapter pense que rien n'est changé et ne fait rien.

+0

J'ai essayé ça. Ça ne marche toujours pas ... :(Merci quand même, je pense que je vais suivre les conseils de GxG et passer la commande SqlClient ... – Woody

0
private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    TradesDataSet.TradesRow newTradesRow = tradesDataSet.Trades.NewTradesRow(); 

    newTradesRow.ID = textBoxTradeID.Text; 
    newTradesRow.EntryPrice = textBoxEntryPrice.Text; 
    newTradesRow.ExitPrice = textBoxExitPrice.Text;    

    tradesDataSet.Trades.Rows.Add(newTradesRow); 
    //Wrong, this command says that what I have in the dataset is what is in 
    //the database. You only use this if you manually update the dataset in 
    //the background. 
    //tradesDataSet.Trades.AcceptChanges(); 

    try 
    { 
     //EndEdit then force a validate. 
     this.tradesBindingSource.EndEdit(); 
     this.Validate(); 
     //Internally this method calls .AcceptChanges(); 
     this.tradesTableAdapter.Update(this.tradesDataSet.Trades);     
     MessageBox.Show("Update successful"); 
    } 
    catch (System.Exception ex) 
    { 
     MessageBox.Show("Update failed"); 
    } 
}   
1

Il y a une autre possibilité. Si vous avez ajouté une base de données à votre projet et que vous avez défini la propriété "Copier dans le répertoire de sortie" sur "Toujours", toutes les modifications apportées à votre base de données seront annulées.

Pour éviter cet ensemble que la propriété de « copier si récent » ou « Ne pas copier »

Questions connexes