2010-05-14 11 views
15

So che questa non è una domanda inutile, ma non posso fare a meno di esserne infastidita.Perché il "Non" in "ExecuteNonQuery"?

Quindi,
Perché detto metodo (in *Command classi) si chiama
ExecuteNonQuery invece di ExecuteQuery?

Non sono quelle istruzioni SQL che lanciamo ai DB, query?

risposta

15

Semanticamente, una query è qualcosa che si esegue per restituire i dati. Stai "interrogando" il database per trovare tutte le X nella Y.

Se non ti aspetti i risultati, non è tanto una query quanto una dichiarazione o comando.

+0

Ma può essere un SELECT. Quindi, perché non solo "myCommand.Execute()"? –

+0

@Camilo: poiché esiste ExecuteReader() che restituisce i risultati della query o anche ExecuteScalar(), per risultati a valore singolo. –

+0

Grazie, non sapevo di ExecuteScalar :) –

1

Non se ne sono inserti, cancella, creare tabelle, ecc

+0

Ma un metodo che ** può ** eseguire una query (ad esempio, SELECT) non deve essere chiamato ExecuteNonQuery. Questo è quello che mi dà fastidio. –

+2

It * can * esegue un 'SELECT', ma non ha senso usare' ExecuteNonQuery' con un 'SELECT', perché in realtà non restituisce un risultato. –

+2

@Camilo le classi DB non sanno se è necessaria una risposta che dica esplicitamente all'oggetto DB che non ci si aspetta nulla che renda spazio alle ottimizzazioni. Tu come dev potrebbe non volere qualcosa restituito da un'istruzione select (selezionare * in ... per uno) –

0

Vorrei pensarlo come una query sta chiedendo il database per i record. Le azioni che alterano i dati/database non sarebbero una query.

Problemi correlati