none
[Come fare] ExecuteReader, ExecuteNonQuery, ExecuteScalar ... Quando usare Cosa? RRS feed

  • Discussione generale

  • namespace SqlClient in ADO.NET offre 3 metodi di base per eseguire le query con SqlCommand contro MSSQL:

     

    • ExecuteReader

    • ExecuteNonQuery

    • ExecuteScalar

     

     

    . NET Framework ora è in giro già da cinque anni, ma questi tre metodi sono tra le più abusate nello sviluppo di applicazioni. Il problema è che ExecuteReader lavorerà per ogni query via SqlCommand, così molte persone lo utilizzano in tutto il mondo. Il diretto risultato - una soluzione lenta e non scalabile. Altri risultati finiscono in database collo di botiglia, serrature e perdite di connessione.

     

    Così ho deciso di fornire un piccolo cheat-sheet che dimostra chiaramente quando utilizzare ciascun metodo.

     

    ExecuteReader

    Non usare: quando query di database in cui sarà fornito di sicuro esattamente un record. Si può ottenere dal suo record id (che è PK nel database) - GetOrderById e simili. In questo caso è cosigliato l'utilizzo di ExecuteNonQuery con parametri di output.

     

    Uso: quando query di database in cui sarà fornito un set di record. Essa può essere una ricerca o un report.

     

    ExecuteNonQuery

    Uso: quando si parla di un record di database unico - in Update, Insert, Delete e Get By Id. In tutti questi casi possiamo utilizzare parametri di input/output/input-output. Si prega di notare che dal punto di vista architettura applicazione è anche benefico quando la tua Insert e Update stored procedure restituisce il record cambiato esattamente come metodo Get By Id lo fa.

     

    ExecuteScalar

    Non utilizzare: quando query di database restituisce un singolo valore e questo valore può essere definito come parametro in T-SQL. ExecuteNonQuery con parametro(i) di uscita è sempre preferito, in questo caso dato che è più flessibile, se un domani ci saranno 2 valori con ExecuteNonQuery quindi non abbiamo bisogno di cambiare la firma dei metodi.

     

    Uso: quando query di database restituisce un singolo valore e questo valore non può essere definito come parametro di output, a causa della limitazione di tipo T-SQL per le variabili. Ad esempio l'immagine tipo non può essere parametro di output in MSSQL.

     

    L'esempio più comune per il recupero ExecuteScalar è una singola immagine memorizzata nel database e convertirla in array di byte. La maggior parte degli esempi all'utilizzo di ExecuteReader per realizzare gestore di immagini, tuttavia per questi ExecuteScalar sarà più scalabile e più velocemente.

     

    Conclusione

    Usare sempre ExecuteNonQuery salvo: quando si hanno una serie di record - uso ExecuteReader e quando si ha un unico valore di output che non può essere definito come un parametro usare ExecuteScalar . Spero che questo ha contribuito a chiarire qualcosa.


    Questo contenuto è distribuito “as is” e non implica alcuna responsabilità da parte di Microsoft. L'azienda offre questo servizio gratuitamente, allo scopo di aiutare gli utenti e farli aumentare la conoscenza sui prodotti e le tecnologie Microsoft.
    lunedì 9 agosto 2010 09:36