Aiuto per il comando “UPDATE”

di minotaurus7 il
15 risposte
Saluto tutto il forum e mi presento:
Sono solo un appassionato e mi diletto a crearmi qualche piccolo programmino. Prima usavo il visual basic, ma da un po mi è presa la fissa del C#.
Ora ho un problema di aggiornamento dati su un db access.
Non riesco a costruirmi il comando in modo corretto con normale mal funzionamento.
Vi scrivo ciò che scrivo io come comando e se per favore qualcuno mi riesce a dare una mano.
Grazie.
Uso Visual studio ed il programmino è in C#.


…..(“Update tabella Set rimborso=Si Where ID=“ variabile, connessione);
Praticamente non riesco ad inserire quella variabile per fare la comparazione di quel dato.
Spero in un vostro aiuto.
Grazie.

15 Risposte

  • ID=" variabile

    La variabile come la concateni alla stringa?
  • Per le query, serve utilizzare i parametri.
    L'esempio è su una SELECT, ma sull'UPDATE funziona alla stessa maniera l'impostazione del comando. Usa i punti interrogativi come segnaposto e poi aggiungi i parameteri alla collection nell'ordine in cui sono nella query.
  • Naturalmente i parametri sono preferibili e dovrai utilizzarli alla fine.

    Ma prima di tutto, se vuoi capire cosa sbagli, comincia a studiare le basi del linguaggio e gli "operatori di concatenazione".
  • Non sottovalutare l'importanza dei SqlParameters (http://infodoc.altervista.org/guida-csharp/esecuzione-di-comandi-sql-con-parametri-la-classe-sqlparameter/) nella scrittura delle istruzioni sql , ti mettono al riparo dalla sql injection https://social.technet.microsoft.com/wiki/contents/articles/53105.c-sql-injection-protection-using-parameterized-queries.aspx ,
    per approfondire la conoscenza del linguaggio c# puoi fare riferimento anche a questo manuale gratuito: https://introprogramming.info/english-intro-csharp-book/

  • Grazie per l'interessamento a tutti...
    La stringa la concateno alla variabile con il "+", ma non funziona lo stesso.
    Continua a dirmi che c'è un errore di sintassi e che manca l'operatore.
    Vi posto la stringa scritta esattamente:
    
    mycmd = new OleDbCommand("Update Visite Set Rimborsato = @Rimborsato Where Descrizione_Visita = ?" + variabile.ToString(), connessione);
    mycmd.Parameters.Add("@Rimborsato", OleDbType.VarChar).Value = "Si";
    connessione.Open();
    mycmd.ExecuteNonQuery();
    connessione.Close();
    
    sto provando a capire i consigli che mi avete dato, ma niente...
  • Il "?" dopo l'uguale a cosa dovrebbe servire? ,
    magari trasforma anche "variabile" in un parameter
  • Ok ... Grazie. Provo.
  • Gian82, grazie di cuore. stavo impazzendo.

    Comunque comprendo che la stringa di aggiornamento la posso scrivere in vari modi, dove e cosa posso leggere per informarmi meglio??

    Grazie ancora a tutti.
  • Su c# trovi molta documentazione ,ad esempio :
    1) libro gratuito su ABC https://antoniopelleriti.it/wp-content/uploads/2019/11/ABCsharp-guida-alla-programmazione-in-csharp-8.pdf
    2) https://learn.microsoft.com/it-it
    3) https://stackoverflow.com
    4) manuali ,con qualche decina di euro puoi acquistare un buon manuale
    5) google od altri motori ti permettono ,in genere , di trovare tutorial ed esempi specifici relativi al particolare "problema" che devi risolvere

    l'elenco non è ovviamente esaustivo ,
  • Grazie ancora
  • gian82 ha scritto:


    Il "?" dopo l'uguale a cosa dovrebbe servire?
    Dovrebbe essere il segnaposto del parametro.

    In teoria il codice dovrebbe essere
    mycmd = new OleDbCommand("Update Visite Set Rimborsato = ? Where Descrizione_Visita = ?", connessione);
    mycmd.Parameters.Add("@Rimborsato", OleDbType.VarChar).Value = "Si";
    mycmd.Parameters.Add("@DescVisita", OleDbType.VarChar).Value = "Visitato"; //specificare il valore corretto per il campo Descrizione_Visita
    connessione.Open();
    mycmd.ExecuteNonQuery();
    connessione.Close();
  • Grazie anche a te Sgrubak.
    Grazie ancora a tutti.
  • Xsgrubak :il segnaposto non dovrebbe essere la chiocciolina seguita dal nome ,ad es @Rimborsato .... ?
  • gian82 ha scritto:


    Xsgrubak :il segnaposto non dovrebbe essere la chiocciolina seguita dal nome ,ad es @Rimborsato .... ?
    La guda recita
    Il provider .NET OLE DB non supporta i parametri denominati per il passaggio di parametri a un'istruzione SQL o a una stored procedure chiamata da quando OleDbCommand CommandType è impostato su Text. In questo caso, è necessario utilizzare il segnaposto punto interrogativo (?). Ad esempio:

    SELECT * FROM Customers WHERE CustomerID = ?

    Pertanto, l'ordine in cui OleDbParameter gli oggetti vengono aggiunti all'oggetto OleDbParameterCollection deve corrispondere direttamente alla posizione del segnaposto del punto interrogativo per il parametro.
    Dato che nel codice non vi è traccia della modifica della proprietà e il default è Text, serve usare i "?" ed aggiungere i parametri in ordine.
Devi accedere o registrarti per scrivere nel forum
15 risposte