Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Update e parametri - Cosa sbaglio ??

    Dim strQuery As String
    strQuery = "UPDATE tbTabella SET Campo = 'Pippo' WHERE Codice = @Codice"

    Dim objConnessione As New OleDbConnection(strConnessione)
    objConnessione.Open()

    Dim objCommand As New OleDbCommand(strQuery, objConnessione)

    objCommand.Parameters.Add("@Codice", "001")

    objCommand.ExecuteNonQuery()
    objConnessione.Close()

    ERRORE SERVER: Dichiarare la variabile '@Codice'

    Che vuol dire? Quello è un parametro! Non si aggiungono in questo modo i parametri?

  2. #2
    Se usi un DB Access i parametri nella stringa SQL li devi indicare così

    codice:
    strQuery = "UPDATE tbTabella SET Campo = 'Pippo' WHERE Codice =?"
    Ciao

    Marco

  3. #3
    No no io uso SQL Server ma credevo di fare bene...

    Mi sa che è sbagliato proprio il concetto e dovrei usare Sqlconnection e Sqlcommand per creare un Sqldatareader. Vero?

    Non è che puoi abbozzarmi un esempio piccolo piccolo di update anche con un solo parametro? Non riesco a trovare esempi semplici e funzionanti...

  4. #4
    Originariamente inviato da JackInTheGreen
    No no io uso SQL Server
    se usi sqlserver dal 7.0 in su ti consilio di utilizzare i metodi e le classi offerte dal namespace system.data.sqlclient e non system.data.oledbclient. Sulle differenze tra i due dataprovider ti invito a leggere le rispettive docuemntazioni.
    Mi sa che è sbagliato proprio il concetto e dovrei usare Sqlconnection e Sqlcommand per creare un Sqldatareader. Vero?
    premesso che utilizzi le classi a partire dal namespace System.Data.OleDb
    un oggetto di tipo OleDbDataReader serve per essere riempito di record e letto dal primo all'ultimo. Non ha nessuna utilita' quando devi far un update dei dai presenti nel db. Per quest'ultima operazione hai bisogno di un oggetto di tipo OleDbCommand. Detto questo per quello che vuoi fare tu dovresti specificare meglio le operazioni che vuoi fare con il command dopo averlo inizializzato.
    codice:
    Dim strQuery As String 
    Dim objConnessione As New OleDbConnection(strConnessione)
    Dim objCommand As OleDbCommand
    Dim param As Integer = 1
    strQuery = strQuery .Format("UPDATE tbTabella SET Campo = 'Pippo' WHERE Codice = {0}", param)
    objCommand = objConnessione.createcommand ' un metodo come un altro pper inizializzare il command associando la connection
    objCommand.CommandType = CommandType.Text
    objCommand.CommandText = strQuery 
    objConnessione.Open() 
    objCommand.ExecuteNonQuery() 
    objConnessione.Close()
    Nel tuo codice, utilizzi un oggetto parameter che di solito si utilizza quando hai a che fare con delle storedprocedures. Da dire che non lo inizializzi e valorizzi molto bene.
    Forse quando usi i parametri dovresti comunque fare cosi
    codice:
    objCommand.Parameters.Add("("@Codice", OleDb.OleDbType.Integer).Value = 1
    in modo da diminuire il riscio di errori (se il campo Codice della tua tabella e' un intero non credo che passargli 001 sia una buona idea).
    Il codice inserito non e' stato verificato ma puo' servirti come indicazione e approfondito con la documentazione.
    Saluti a tutti
    Riccardo

  5. #5
    codice:
    <%@ Import Namespace="System.Data.SqlClient %>
    <script runat="server>
    Sub Button_click(s As Object, e As eventArgs)
    Dim objCon As SqlConnection
    Dim strUpdate As string
    Dim CmdUpdate As SqlCommand
    
    objCon=New SqlConnection("tua scringa di connessione al DB")
    strUpdate="UPDATE tbTabella SET Campo = 'Pippo' WHERE Codice = @Codice"
    cmdUpdate=New SqlCommand(strUpdate,objCon)
    cmdUpdate.Parameters.Add("@Codice",tuovalore)
    objCon.Open()
    cmdUpdate.ExecuteNonQuery()
    objCon.Close()
    End sub
    </script>
    è sbagliato usare le classi OleDb con un SQL server per un discorso di prestazioni, visto che le classi sqlClient sono state create per fruttare al meglio quel tipo di DB.
    In teoria potresti usare anche le classi OleDb per accedere a SQL server ma con prestazioni minori.
    Ciao


    Marco

  6. #6
    Non mi è utto chiarissimo ma è una buona indicazione, siete stati gentilissimi. Ho cambiato la pagina usando System.Data.SqlClient e i vari SqlConnection e SqlCommand.

    Per la pagina 'Inserisci' che crea e inserisce un nuovo record funziona bene.

    Ho però una pagina 'Modifica'. Questa riceve un parametro querystring da una pagina 'Lista', lo recupera e riempie un SQLDATAREAD con un 'SELECT * FROM etc..'

    Lo scoglio è che non riesco a leggere dal DATAREAD che ho riempito!

    Credevo si recuperasse così:
    objDataReader = objCommand.ExecuteReader()
    Codice.Text = objDataReader("Codice")

  7. #7
    Devi usare i metodo Read attraverso una istruzione if o un ciclo while

    Esempio:
    codice:
    If objDataReader.Read() then
    Codice.Text = objDataReader("Codice")
    end if
    
    objDataReader.Close()
    objCon.Close()
    Ciao


    Marco

  8. #8
    Hai proprio ragione e l'ho scoperto 10 secondi dopo aver postato. Come sono idiota!

    Grazie dell'aiuto e scusami per le domande banali prima o poi imparerò qualche cosa anch'io.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.