2010-12-14 4 views
0

Je ne sais pas pourquoi chaque fois que j'effectue la mise à jour de mon dossier, la requête dont je mets à jour n'incrémente pas l'ID de 0 à 1 et toujours il prend 0 .. sais pas comment j'incrémenter mon id à 1 et à ce jour .. s'il vous plaît expliquer ..:/.. mon code est:Un problème dans la mise à jour de l'enregistrement C#

private void btnUpdate_Click(object sender, EventArgs e) 
      { 
       int CustomerID =0; 
       SqlConnection cn = new SqlConnection(@"Data Source=COMPAQ-PC-PC\SQLEXPRESS; 
       Initial Catalog=Gym;Integrated Security=True"); 
       SqlCommand cmd = new SqlCommand("Update Customer set Customer_Name = '" + tbName.Text + "',Cell_Number = '" + tbContactNumber.Text + "',Customer_Address = '" + tbAddress.Text + "' where CustomerID = " + CustomerID, cn); 
       SqlDataAdapter da = new SqlDataAdapter(cmd); 
       DataTable dt = new DataTable(); 
       da.Fill(dt); 
       BindGridView(); 
      } 


private void BindGridView() 
     { 
      SqlConnection cn = new SqlConnection(@"Data Source=COMPAQ-PC-PC\SQLEXPRESS;Initial Catalog=Gym;Integrated Security=True"); 
      SqlCommand cmd = new SqlCommand("Select * from Customer", cn); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable(); 
      da.Fill(dt); 
      dgView_CustomerInfo.DataSource = dt.DefaultView; 
     } 
+1

Vous savez que UPDATE met à jour un ou plusieurs enregistrements * existants *. Si ID est une colonne IDENTITY, elle ne s'incrémentera que lorsque vous insérerez des enregistrements ... –

+4

Première chose importante, lisez les requêtes SQL Injection et paramétrées. Deuxièmement, vous faites quelque chose de très louche ici ... vous liez deux fois DataTable vide à DataGridView ... Ce qui semble plutôt étrange. Et troisièmement, pourquoi l'Id devrait-il augmenter, si vous ne l'incrémentez jamais? Autant que je le vois, vous voulez dire l'Auto-Id de la table, mais un 'Update' ne l'affecte pas. – Bobby

+0

ohh .. je veux mettre à jour un enregistrement existant .. j'ai initialisé int CustomerID = 0 mais .. je ne comprends pas quand un utilisateur clique sur un enregistrement existant qui est présent dans le gridview, comment sera changé id .. –

Répondre

0

Vous avez vraiment besoin de lire un livre sur la programmation .net. Votre code est plein de glitches ...

Pour commencer ...

 // put the connection string into the app.config 
     using (SqlConnection cn = new SqlConnection(@"Data Source=COMPAQ-PC-PC\SQLEXPRESS; Initial Catalog=Gym;Integrated Security=True")) 
     { 
      int result = new SqlCommand("Update Customer set Customer_Name = '" + tbName.Text + "',Cell_Number = '" + tbContactNumber.Text + "',Customer_Address = '" + tbAddress.Text + "' where CustomerID = " + CustomerID, cn).ExecuteNonQuery(); 
      // eval result to see wether there was realy an updated record... 
     } 

Sur un SqlConnection utilisez l'instruction using(). De cette façon, l'élimination de l'objet est prise en charge. En fait, utilisez-le sur tous les objets jetables. Essayez d'utiliser app.config/web.config pour la chaîne de connexion.

Echappez toute l'entrée utilisateur qui va au serveur sql pour empêcher l'injection sql. http://de.wikipedia.org/wiki/SQL-Injection

+0

pouvez-vous me référer le livre? –

+0

J'ai remplacé mon code de votre code et je ne sais pas pourquoi il ne fait rien quand je clique sur le bouton de mise à jour .. –

+0

Si vous définissez un point de rupture dans l'événement update, appelle-t-il réellement la mise à jour? Et l'identifiant n'est pas incrémenté dans tous les cas puisque vous mettez à jour ... –

0

Vous utilisez la clause SQL « Mise à jour du client ». Cela signifie que vous allez mettre à jour l'enregistrement EXISTANT, pas pour en insérer un NOUVEAU.

L'identifiant est incrémenté uniquement pour les nouveaux enregistrements, mais pas pour ceux existants. Assurez-vous également que votre colonne d'ID est correctement configurée. Il devrait a IDENTITÉ (1,1) clause comme dans l'exemple ci-dessous:

CREATE TABLE [dbo].[td_Component](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Url] [nvarchar](250) NOT NULL, 
    [Caption] [nvarchar](50) NOT NULL, 
    [Description] [varchar](4000) NULL, 
+0

je l'ai déjà fait ..:/ –

2

Vous devez utiliser Command.ExecuteNonQuery() à la place.