115 messaggi dal 25 giugno 2008
Ciao ragazzi.
Ho un piccolo problema con la query "Update" per aggiornare i dati in una tabella del mio database.
Ho eseguito il debug, ho inserito i breakpoint per vedere se l'esecuzione era corretta, i dati modificati li prende e li legge però a quanto pare non li memorizza nel database perchè poi quando chiudo il debug e vado a vedere nel database, non ha fatto nessuna modifica:(
vi posto il codice così magari riuscite a capire meglio, almeno spero, dove sta il problema perchè mi sto scervellando ma non io non lo trovo:
Dim sql2 As String
            Dim connectionstring2 = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=" + Server.MapPath("..\..\db\dbNautica.mdb").ToString
            sql2 = "UPDATE Noleggio SET Nome= """ + textNome.Text + ""","
            sql2 += " Descrizione= """ + textDescrizione.Text + """ ,"
            sql2 += " PrezzoGiorno= """ + textPrezzoG.Text + ""","
            sql2 += " PrezzoOra= """ + textPrezzoO.Text + ""","
            sql2 += " Categoria= """ + textCategoria.Text + ""","
            sql2 += " WHERE ID=" + textID.Text + ";"
            Dim myconnection2 As New OleDbConnection(connectionstring2)
            Dim mycommand2 As New OleDbCommand(sql2, myconnection2)
            myconnection2.Open()
            On Error Resume Next
            mycommand2.ExecuteNonQuery()
            myconnection2.Close()
            InserimentoImbarcazione.Visible = True
            ElencoImbarcazioniNoleggio.Visible = True
            ModificaCancella.Visible = False
            confermaCancellazione.Visible = False
NON concatenare MAI le stringhe nelle query!

Leggi qui:

http://vbnetsample.blogspot.com/2007/10/using-sqlparameter-class.html
Byez

imperugo
Microsoft MVP
myblog : http://www.tostring.it
115 messaggi dal 25 giugno 2008
Ma ho utilizzato questo metodo di scrittura per tutte le query eseguite fino ad ora sul db e non ho mai avuto problemi..sinceramente mi trovo bene con questo metodo perchè essendo principiante ho imparato a fare così..dovendo consegnare domani il progetto non ho il tempo di studiarmi quello che mi hai passato..ecco xkè speravo in un aiuto di qualcuno di questo forum sul mio codice....

Uffa...per favore aiutatemi perchè sono in profonda crisi di nerviiiiiiiii....
45 messaggi dal 16 ottobre 2007
Se hai sempre usato le query sql in questo modo non significa che sia corretto, ha ragione imperugo quadno dice che non dovresti concatenare stringhe nelle query SQL in quanto c'è un'altra probabilità di errore ed inoltre, in altri contesti la query è passibile di SQL-injection, il che vuol dire che un hacker può sfruttare la tua query per scopi direi non molto simpatici...

Riscrivi la query in questo modo:
Dim sql2 As String
Dim param(6) As SqlParameter
Dim connectionstring2 = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=" + Server.MapPath("..\..\db\dbNautica.mdb").ToString()

sql2 = "UPDATE Noleggio SET Nome=@Nome,"
sql2 += " Descrizione=@Descrizione,"
sql2 += " PrezzoGiorno=@PrezzoG,"
sql2 += " PrezzoOra=@PrezzoO,"
sql2 += " Categoria=@Categoria,"
sql2 += " WHERE ID=@ID"

param(0) = New SqlParameter("@Nome", SqlDbType.VarChar)
param(0).Value = textNome.Text

param(1) = New SqlParameter("@Descrizione", SqlDbType.VarChar)
param(1).Value = textDescrizione.Text

param(2) = New SqlParameter("@PrezzoG", SqlDbType.VarChar)
param(2).Value = textPrezzoG.Text

param(3) = New SqlParameter("@PrezzoO", SqlDbType.VarChar)
param(3).Value = textPrezzoO.Text

param(4) = New SqlParameter("@Categoria", SqlDbType.VarChar)
param(4).Value = textCategoria.Text

param(5) = New SqlParameter("@ID", SqlDbType.VarChar)
param(5).Value = textID.Text

Dim myconnection2 As New OleDbConnection(connectionstring2)
Dim mycommand2 As New OleDbCommand(sql2, myconnection2)
mycommand2.Parameters.AddRange(param)

myconnection2.Open()
On Error Resume Next
Dim nResult As Integer = mycommand2.ExecuteNonQuery()
myconnection2.Close()
mycommand2.Dispose()

N.B.: Controlla i tipi di ogni SqlParameter che siano esattamente del tipo della colonne del DB che hai e vedi di assegnare correttamente i parametri (param(i).Value) come tipo di dato.
Controlla cosa ritorna nResult che è un intero che ti dice il numero di righe modificate dall'update.

Fammi sapere,

Ciao,

Luca
Esatto!
Ovviamente questo:

sql2 = "UPDATE Noleggio SET Nome=@Nome,"
sql2 += " Descrizione=@Descrizione,"
sql2 += " PrezzoGiorno=@PrezzoG,"
sql2 += " PrezzoOra=@PrezzoO,"
sql2 += " Categoria=@Categoria,"
sql2 += " WHERE ID=@ID"

può anche essere una sola stringa senza concatenare dato che non ci sono parti dinamiche.
Ciauz

imperugo
Microsoft MVP
myblog : http://www.tostring.it
115 messaggi dal 25 giugno 2008
ok grazie ragazzi x il consiglio..le prossime volte le query le scriverò così;) cmq quel problema l'ho risolto..c'erano errori nell'uso delle "" ad alcuni campi
alla prox..ciao ciao
45 messaggi dal 16 ottobre 2007
Ciao, è proprio per ovviare queste cose che non si scrivono le query a mano concatenando le stringhe a esempio.

ciao,

Luca
Esatto,
se utilizzavi subito i parameters non avevi questo problema.

Ciauz

imperugo
Microsoft MVP
myblog : http://www.tostring.it

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.