Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560

    [VB.NET] ExecuteNonQuery non restituisce il numero di record

    Ciao a tutti,
    eseguo un semplicissimo comando SQL (SELECT * FROM utenti) lanciandolo con Command.ExecuteNonQuery() per sapere quanti record contiene la tabella ma mi viene restituito sempre 0... ah utilizzo un mdb Access...
    il codice:


    codice:
                Dim StrSql As String = "SELECT * FROM Utenti"
                Using ConnAcc As New OleDbConnection(Connessione)
                    Dim CommAcc As New OleDbCommand(StrSql, ConnAcc)
                    Try
                        CommAcc.Connection.Open()
                        ExecSql = CommAcc.ExecuteNonQuery()
                    Catch ex As Exception
                        WriteErr(ex, StrSql)
                    End Try
                End Using

    dove sbaglio?

    Grazie

  2. #2
    codice:
    Dim StrSql As String = "SELECT count(*) FROM Utenti"
                Using ConnAcc As New OleDbConnection(Connessione)
                    Dim CommAcc As New OleDbCommand(StrSql, ConnAcc)
                    Try
                        CommAcc.Connection.Open()
                        ExecSql = CommAcc.ExecuteReader();
                    Catch ex As Exception
                        WriteErr(ex, StrSql)
                    End Try
                End Using
    -----
    101110101011101111100000
    -----

  3. #3
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Con l'ExecuteReader??
    Perchè nella documentazione dicono che l'ExecuteNonQuery restituisce il numero di righe su cui è intervenuto il comando SQL? Con il SELECT non funziona?

    grazie

  4. #4
    executenonquery (come dice il nome) serve per istruzioni di UPDATE DELETE INSERT. Executereader si usa quando la query restituisce un solo risultato (ho modificato anche la query, mi sembrava inutile caricare un intera tabella solo per sapere il numero di record). Altrimenti esegui la query normalmente e per il numero di righe CommAcc.rows.count
    -----
    101110101011101111100000
    -----

  5. #5
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Sei stato molto chiaro...
    Grazie mille!!
    Ciao

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,461
    Il metodo ExecuteNonQuery esegue statement di UPDATE, INSERT e DELETE, restituendo il numero di record aggiornati, inseriti o eliminati. Nel caso di una SELECT, non si ha nessuno di questi casi.

    Per eseguire istruzioni di SELECT, che restituiscono quindi un "resultset", occorre utilizzare ExecuteReader ottenendo un cursore in grado di scandire i record che rispondono alla query dal primo all'ultimo.

    Nel caso di un semplice conteggio, è ancora meglio utilizzare il metodo ExecuteScalar, che restituisce il valore del primo campo del primo record dei risultati ottenuti; in questo caso, trattandosi di un solo record formato da un solo campo che è il conteggio dei record selezionati, è perfetto.

    La guida MSDN fornisce ulteriori indicazioni.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Originariamente inviato da xam85reBanned
    executenonquery (come dice il nome) serve per istruzioni di UPDATE DELETE INSERT. Executereader si usa quando la query restituisce un solo risultato (ho modificato anche la query, mi sembrava inutile caricare un intera tabella solo per sapere il numero di record). Altrimenti esegui la query normalmente e per il numero di righe CommAcc.rows.count
    Si scusa ExecuteScalar e non ExecutReader.
    -----
    101110101011101111100000
    -----

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,461
    Originariamente inviato da xam85reBanned
    Si scusa ExecuteScalar e non ExecutReader.
    Usare ExecuteReader non è ovviamente vietato, anzi... però si risparmia nella scrittura di codice, rendendolo un po' più leggibile e - teoricamente, s'intende - l'uso di ExecuteScalar dovrebbe essere più performante (in quanto il metodo è a conoscenza che si utilizza solamente per estrarre un singolo valore).

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.