Visualizzazione dei risultati da 1 a 7 su 7

Discussione: 3 problemi con update

  1. #1
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218

    3 problemi con update

    salve ragazzi,
    ho questo codice che si propone di effettuare una update:

    protected void Button4_Click(object sender, EventArgs e)
    {
    if (TextBox6.Text == string.Empty ||TextBox6.Text.Length>1) //il codice che codifica lo stato civile è fatto da una sola lettera
    Response.Write("specificare un codice valido");

    else
    {
    DataBind();
    string cmd = "UPDATE ha_stato_civile SET cod_stato_civile=@cod_stato_civile,data_variaz_sc= '+System.DateTime.Now+',flag_sc_corrente='s' WHERE ha_stato_civile.cod_persona=@cod_persona"; //------------>problema 2

    SqlParameter cod_sc = new SqlParameter("@cod_stato_civile", SqlDbType.VarChar);
    cod_sc.Value = Server.HtmlEncode(TextBox6.Text); //-------->problema 1

    SqlParameter cod_pers = new SqlParameter("@cod_persona", SqlDbType.Int);
    cod_pers.Value = Server.HtmlEncode(TextBox1.Text);

    SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["dati_generali"].ConnectionString);
    SqlCommand oCommand = new SqlCommand(cmd, oConn);
    oCommand.Parameters.Add(cod_sc);
    oCommand.Parameters.Add(cod_pers);

    oConn.Open();
    SqlDataReader reader = oCommand.ExecuteReader();
    tabella = new DataTable();
    tabella.Load(reader);
    oCommand.Dispose();
    oCommand = null;
    oConn.Close();
    GridView2.DataBind(); //aggiornami il gridview

    TextBox5.Text = GridView2.Rows[0].Cells[0].ToString();//aggiornami la textbox che mostra lo stato civile...questo è un codice provvisorio perchè non riesco a mostrare nulla--------->problema 3
    }
    }

    Ma ho dei problemi:

    1)
    il primo riguarda cod_sc.Value = Server.HtmlEncode(TextBox6.Text);
    infatti se al posto di TextBox6.Text provo a mettere una dropdownlist (collegata ad una tabella contenente tutti i possibili stati civili) con questa sintassi:
    miadrop.SelectedValue.ToString()
    non mi fa alcun aggiornamento, mentre con la textbox6 funziona tutto! Ho anche provato con selecteditem ma nulla...


    2)
    come faccio a far vedere tramite la textbox5 il record subito aggiornato?

    3)
    come faccio ad impostare la data e l'ora attuali del sistema nella query di update? io scrivo nella stringa:
    UPDATE ha_stato_civile SET cod_stato_civile=@cod_stato_civile,data_variaz_sc= '+System.DateTime.Now+',flag_sc_corrente='s' WHERE ha_stato_civile.cod_persona=@cod_persona
    ma risponde:
    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
    The statement has been terminated.

    se qualcuno di voi potesse aiutarmi, gli sarei enormemente grato.. ci sto sbattendo la testa da ore, ed ora inizia a farmi male!
    grazie in anticipo!


    ps: uso sqlserver, c# e la tabella ha_stato_civile si compone di questi 4 campi:
    cod_persona (si riferisce a una tabella 'cittadino')
    cod_stato_civile (si riferisce a una 'tabella_decod_stato_civile')
    data_variaz_sc (datetime)
    flag_sc_corrente

  2. #2
    innanzitutto tconsiglio di riscrivere tutto utilizzando correttamente i Parameter. Questo risolverà sicuramente il problema della data, e forse anche l'altro.
    é molto importante utilizzare sempre i parameter e non concatenare le stringa della query a mano, perchè eviti problemi di sicurezza (injection) non chè fastidiosi problemi legati alla formattazione del testo (es, apici che se fai a mano vanno sostituiti con \', caratteri accentati, etc.., nonchè il formato della data)

    Per esempio:

    Codice PHP:
    string cmd "UPDATE ha_stato_civile SET cod_stato_civile=@cod_stato_civile,data_variaz_sc=@data, flag_sc_corrente=@flag WHERE ha_stato_civile.cod_persona=@cod_persona"
    Codice PHP:
    //per la data:

    SqlParameter paramData = new SqlParameter("@data"SqlDbType.DateTime);
    paramData.ValueDateTime.Now
    stessa cosa per il dropdown, utilizza innanzitutto il parametro, se poi continua a non funzionare, potresti farmi vedere il codice(markup) della pagina aspx? sei sicuro di aver impostato correttamente le coppie testo/valore del DropDown? se prendi la proprietà miodrop.SelectedValue, ti viene restituito il "valore", non il testo visualizzato, quindi è probabile che se le coppie non sono impostate correttamente non ti viene restituito nulla.
    Non c'è bisogno di fare il miadrop.SelectedValue.ToString(), in quanto SelectedValue ti restituisce già stringa.

    poi questo concettualmente sbagliato:

    Codice PHP:
    SqlParameter cod_pers = new SqlParameter("@cod_persona"SqlDbType.Int);
    cod_pers.Value Server.HtmlEncode(TextBox1.Text); 
    se il parametro è di tipo SqlDbType.Int, devi passare a value il corripondente tipo .NET, cioè un INT.
    Essendo che il dropdown o textbox che sia, restituisce string, devi convertirlo.

    quindi deve diventare:
    Codice PHP:
    SqlParameter cod_pers = new SqlParameter("@cod_persona"SqlDbType.Int);
    cod_pers.Value int.Parse(TextBox1.Text
    comincia a sistemare queste cose e mi fai sapere...

    ciao
    Davide
    Davide

  3. #3
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    eccomi qui come promesso nel thread precedente...

    allora... ho scritto la sintassi dei parametri (come giustamente hai suggerito tu ), ma a runtime dice 'must declare scalar variable @data', mentre se imposto una data predefinita mi crea lo stesso problema con @flag, mentre la data me la registra....

    adesso mi spiego mediante codice... se io scrivo con data parametrica
    string cmd = "UPDATE ha_stato_civile SET cod_stato_civile=@cod_stato_civile,data_variaz_sc= @data, flag_sc_corrente=@flag WHERE ha_stato_civile.cod_persona=@cod_persona";

    SqlParameter cod_sc = new SqlParameter("@cod_stato_civile", SqlDbType.VarChar);
    cod_sc.Value = Server.HtmlEncode(TextBox6.Text);
    SqlParameter cod_pers = new SqlParameter("@cod_persona", SqlDbType.Int);
    cod_pers.Value = Server.HtmlEncode(TextBox1.Text);
    SqlParameter data = new SqlParameter("@data", SqlDbType.DateTime);
    data.Value = DateTime.Now;
    SqlParameter flag = new SqlParameter("@flag", SqlDbType.VarChar);
    flag.Value = "s";

    e mi dice che devo dichiarare @data, mentre se scrivo una data prefissata

    string cmd = "UPDATE ha_stato_civile SET cod_stato_civile=@cod_stato_civile,data_variaz_sc= '1/1/2007 12:30:00',flag_sc_corrente=@flag WHERE ha_stato_civile.cod_persona=@cod_persona";
    e impongo quei parametri, mi segna il @flag VVoVe:

    per quel che riguarda cod_persona, non ho usato il parse perchè la textbox che fornisce quel campo è sotto regularexpressionvalidator che mi controlla che sia effettivamente composta da numeri... anche così credi dovrei usare il parse?

    per quel che riguarda la droplist... il parametro era impostato sulla textbox6, ma ho provato anche

    SqlParameter cod_sc = new SqlParameter("@cod_stato_civile", SqlDbType.VarChar);
    cod_sc.Value = Server.HtmlEncode(dropdownlist1.SelectedValue);
    ma non aggiorna nulla..
    cmq adesso ti posto il markup:

    -------------------
    <asp: DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource4"
    DataTextField="nome_stato_civile" DataValueField="cod_stato_civile" Visible="False">
    <asp:ListItem></asp:ListItem>
    </asp: DropDownList>
    -----------------------

    gli item li becca da database, da una tabella 'tabella_decod_stato_civile', composta da due campi:
    cod_stato_civile(varchar(1))
    nome_stato_civile(varchar(20))

    nella ddl io vedo la lista dei nomi di stato civile, mentre per aggiornare au database devo usare il codice... e se non ho frainteso nel markup è quello che ho fatto..
    o c'è qc altro modo di associare nome e valore?

  4. #4
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    ciao!
    la storia della droplist l'ho risolta , dopo tante botte ora fa il suo dovere..
    adesso rimane la storia del @flag e @data che continua a non riconoscermeli

  5. #5
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    e anche gli altri due sono sistemati!
    a furia di dare capocciate alla fine l'ho avuta vinta...
    grazie all'amico 'braidiano' che mi ha aiutato!

  6. #6
    ho letto adesso la risposta!

    di nulla qual'era il problema sulla data?
    Davide

  7. #7
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    il problema era che mi riferivo alla data sbagliata: nella mia tabella avevo due date, una di tipo datetime e una string (quest'ultima per motivi di prova) e cercavo di prendere il valore da quella string e non dalla datetime VVoVe: ... ora quella di prova l'ho eliminata.

    comunque ti ringazio ancora per il tuo aiuto

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.