Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Aggiornamento DB

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    33

    Aggiornamento DB

    Salve ragazzi, sto provando a fare aggiornare il db con le info degli utenti, dal pannello di controllo, ma non va.
    Ho capito che nel comando ci entra, ma poi il risultato non si vede, né nel DB né nel sito.

    Ho provato con solo CodeBehind:

    codice:
     protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(strcon);
        SqlCommand cmd = new SqlCommand();
        SqlCommand ncmd = new SqlCommand("Update Utenti Set Nome = @vnome where [Indirizzo E-Mail]=@vem", con);
        ncmd.Parameters.AddWithValue("@vem", Session["[Indirizzo E-Mail]"].ToString());
        ncmd.Parameters.AddWithValue("@vnome", TextBox2.Text);
        ncmd.Connection = con;
        con.Open();
        ncmd.ExecuteNonQuery();
        con.Close();
        Label2.Text = "Dati aggiornati con successo!";
        Response.Redirect("~/ModificaDati.aspx");
    }
    Che con Code Behind e StoredProcedure:
    codice:
    protected void Button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(strcon);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "AggiornaDati";
            cmd.Parameters.AddWithValue("@vnome", TextBox2.Text);
            cmd.Parameters.AddWithValue("@vcognome", TextBox3.Text);
            ////cmd.Parameters.AddWithValue("@vindirizzo", TextBox5.Text);
            cmd.Parameters.AddWithValue("@vindmail", TextBox6.Text);
            cmd.Parameters.AddWithValue("@vcellulare", TextBox4.Text);
            ////cmd.Parameters.AddWithValue("@vcasa", TextBox9.Text);
            ////cmd.Parameters.AddWithValue("@vcitta", TextBox10.Text);
            cmd.Parameters.AddWithValue("@codfisc", TextBox5.Text);
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
            Label2.Text = "Dati aggiornati con successo!";
        }
    codice:
    CREATE PROCEDURE [dbo].[AggiornaDati]
    	@vnome varchar(50),
    	@vcognome varchar(50),
    	@vcellulare varchar(50),
    	@vindmail varchar(50),
    	@codfisc varchar(50)
    AS
    	update Utenti set Nome=@vnome, Cognome=@vcognome, Cellulare=@vcellulare, [Indirizzo E-Mail]=@vindmail where [Codice Fiscale]=@codfisc;
    RETURN 0
    Il Label va, mi dice che i dati sono stati modificati con successo, ma in realtà i campi rimangono sempre uguali! Come mai?
    Scusate se ultimamente scoccio spesso, ma a volte non riesco proprio a ritrovarmi...

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    per questo tipo di cose devi:

    1. controllare come viene formata la stringa che sara' la tua query
    2. eseguirla in management studio per vedere se funziona

    In pratica vedi come viene formato il command dopo l'ultima .AddWithValue ed esegui la query nel client di SqlServer per vedere se è scritta correttamente (o ci sono errori su apici, tipi di dato, spazi etc).

    Comunque secondo me il codice dovrebbe essere:

    codice:
            protected int Button1_Click(object sender, EventArgs e)
            {    
                int affected = 0;
                SqlConnection con = new SqlConnection(strcon);
    
                SqlCommand ncmd = new SqlCommand("Update Utenti Set [Nome]=@vnome where [Indirizzo E-Mail]=@vem", con);
    
                ncmd.Parameters.AddWithValue("@vem", Session["[Indirizzo E-Mail]"].ToString());
                ncmd.Parameters.AddWithValue("@vnome", TextBox2.Text);
               
                con.Open();
    
                try
                {
                  affected = ncmd.ExecuteNonQuery();
                  
                  if (affected > 0)
                  {
                   Label2.Text = "Dati aggiornati con successo!"; // non viene vista se fa il redirect
                   Response.Redirect("~/ModificaDati.aspx");    
                  }
                  return affected;
                }
                catch(Exception ex) 
                {
                  return -1;
                }
                finally
                {
                      con.Close();
                      ncmd.Dispose();
                }
            }
    1. nel tuo codice hai due command

    2. ti consiglio inoltre di non mettere spazi nei nomi delle colonne delle tabelle...

    3. manca un try / catch su ".ExecuteNonQuery()" per smistare la logica a seconda che l'operazione sia andata a buon fine o meno, perche' con il codice da te inizialmente postato, potrebbe comunque eseguire il cambio del testo della label e la redirect.


    PS: Un DEBUG ti aiuta a capire dove e' il problema !

  3. #3
    Originariamente inviato da djciko
    In pratica vedi come viene formato il command dopo l'ultima .AddWithValue e lanci qry nel client di Sql Server per vedere se è scritta correttamente (o ci sono errori su apici, tipi di dato, spazi etc).
    spieghi come fare questa cosa praticamente? grassie

  4. #4
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Immagino che intenda
    Prima del cmd.ExecuteNonQuery();
    Ti metti in blocco e prendi la query che deve essere eseguita entrando dall'oggetto cmd
    Provi ad eseguirla direttamente via sqlserver managment, se funziona significa che c'è qualche problema nel passaggio dei parametri,
    in quel caso sempre nell'oggetto cmd verifichi che i parameters ci siano e siano valorizzati correttamente.

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da optime
    spieghi come fare questa cosa praticamente? grassie
    cmd.CommandText DOVREBBE essere anche disponibile in lettura.
    (In realta' quando ci sono i parametri in ballo, mi pare di ricordare che non funziona ).


    comunque in pratica consigliavo di vedere il valore dei parametri che in questo caso sono DUE...


    cmq a parte tutto, che io sappia, (non e' questa la causa ma e' meglio ribadirlo) i nomi COLONNA con gli SPAZI (codice fiscale, indirizzo e-mail) sono fortemente sconsigliati !

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    33
    Non funge nemmeno come hai detto tu.

    Non è lo spazio, perché quando si aggiungono i campi durante la registrazione funge.

    Con il Debug cosa e dove devo vedere? Perché non dandomi errori veri e propri non so dove guardare!

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    io andrei a vedere se ci sono record, prima di continuare

    select count(*) from Utenti where [Indirizzo E-Mail]=@vem

    se non dà errore forse è perchè non trova niente da aggiornare
    Pietro

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    33
    Be', se sono loggato vuol dire che i record ci sono! Io modifico i miei dati!

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da NekoMale
    Be', se sono loggato vuol dire che i record ci sono! Io modifico i miei dati!

    Modifica il codice che hai scritto. Invece di fare update fai select count, come ti ho suggerito. E fai response.write del risultato.

    Fai sapere il risultato.
    Pietro

  10. #10
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    Originariamente inviato da NekoMale
    Non funge nemmeno come hai detto tu.

    Non è lo spazio, perché quando si aggiungono i campi durante la registrazione funge.

    Con il Debug cosa e dove devo vedere? Perché non dandomi errori veri e propri non so dove guardare!
    ma la query l'hai provata in sql server ?
    per il debug, metti un breakpoint su Button1_Click

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.