2011-03-18 16 views
12

Questo è il mio codice (approssimativa) (DAL):ExecuteNonQuery()

int i; 
// Some other declarations 

SqlCommand myCmdObject = new SqlCommand("some query"); 

conn.open(); 
i = myCmdObject.ExecuteNonQuery(); 
conn.close(); 

Il problema è: Anche se v'è un record presente sul mio SELECT query, il valore i rimane -1.

Quale potrebbe essere il problema?

risposta

39

Che tipo di ricerca non si esegue? L'utilizzo di ExecuteNonQuery è inteso per le query UPDATE, INSERT e DELETE. Come per the documentation:

Per UPDATE, INSERT e DELETE dichiarazioni, il valore restituito è il numero di righe interessate dal comando . Quando esiste un trigger su un tavolo essere inserito o aggiornato, il valore restituito include il numero di righe interessate sia l'inserto o operazione di aggiornamento e il numero di righe interessate dal grilletto o trigger. Per tutti gli altri tipi di istruzioni , il valore restituito è -1.

+1

Qual è il valore restituito, se si esegue una procedura memorizzata che inserirà o aggiornerà o eliminerà un record in un Tavolo, – Raghuveer

1

Potrebbe pubblicare la query esatta? Il metodo ExecuteNonQuery restituisce la variabile del server Sql @@ROWCOUNT che cosa mai dopo l'esecuzione dell'ultima query è ciò che restituisce il metodo ExecuteNonQuery.

1

Se quello che vuoi è quello di ottenere solo un singolo intero dalla query, utilizzare:

myCmdObject.ExecuteScalar() 
+0

ExecuteScalar restituirà solo il valore che è il primo valore di colonna della prima riga nella query eseguita. –

+0

Questo è vero ma come ho detto quando si seleziona il singolo intero dovrebbe essere nella prima colonna della prima riga :) – IordanTanev

1

Il metodo ExecuteNonQuery viene utilizzato per le istruzioni SQL che sono non query, come ad esempio INSERT, UPDATE, ... Si desidera utilizzare ExecuteScalar o ExecuteReader se si prevede la vostra dichiarazione per restituire i risultati (ad esempio una query) .

0

Da MSDN: SqlCommand.ExecuteNonQuery Method

È possibile utilizzare l'ExecuteNonQuery per eseguire operazioni di catalogo (per esempio, interrogando la struttura di un database o la creazione di database di oggetti come tabelle), o per cambiare la dati in un database senza utilizzare un DataSet eseguendo istruzioni UPDATE, INSERT o DELETE .

Sebbene l'ExecuteNonQuery restituisce nessuna riga, i parametri di uscita o valori restituiti mappati ai parametri sono popolato con i dati.

Per UPDATE, INSERT e DELETE dichiarazioni, il valore restituito è il numero di righe interessate dal comando . Quando esiste un trigger su un tavolo essere inserito o aggiornato, il valore restituito include il numero di righe interessate sia l'inserto o operazione di aggiornamento e il numero di righe interessate dal grilletto o trigger.Per tutti gli altri tipi di istruzioni , il valore restituito è -1. Se si verifica un rollback, il valore restituito è anche -1.

Si sta utilizzando query SELECT, quindi si ottiene -1

0

se si desidera eseguire un aggiornamento, cancellare, o inserire dichiarazione, è necessario utilizzare il ExecuteNonQuery. ExecuteNonQuery restituisce il numero di righe interessate da l'istruzione.

How to Set Count On

5

si utilizza EXECUTENONQUERY() per INSERT, UPDATE e DELETE.

Ma per SELECT è necessario utilizzare EXECUTEREADER() .........

11

Ogni volta che si desidera eseguire un'istruzione SQL che non dovrebbe restituire un valore o un set di record, l'ExecuteNonQuery dovrebbe essere usato.

Quindi, se si desidera eseguire un aggiornamento, eliminare o inserire un'istruzione, è necessario utilizzare ExecuteNonQuery. ExecuteNonQuery restituisce il numero di righe interessate dall'istruzione. Sembra molto bello, ma ogni volta che si utilizza SQL Server 2005 IDE o Visual Studio per creare una stored procedure, viene aggiunta una piccola riga che rovina tutto.

Tale riga è: SET NOCOUNT ON; Questa riga attiva la funzionalità NOCOUNT di SQL Server, che "Ferma il messaggio che indica il numero di righe interessate da un'istruzione Transact-SQL da restituire come parte dei risultati" e pertanto rende sempre la procedura memorizzata restituire -1 quando chiamato dall'applicazione (nel mio caso un'applicazione web).

In conclusione, rimuovere tale riga dalla stored procedure e verrà visualizzato un valore che indica il numero di righe interessate dall'istruzione.

Buona programmazione!

http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html

Problemi correlati