2011-11-14 14 views
8

Ive ha utilizzato questo metodo prima per restituire la quantità di righe modificate. Io sono per eseguire un metodo di inserimento, l'inserto viene eseguito correttamente nella stored procedure, ma il valore restituito da ExecuteNonQuery restituisce sempre -1.C#: ExecuteNonQuery() restituisce -1

Ecco il mio codice C#:

int ret = 0; 

using (SqlConnection conn = new SqlConnection(this.ConnectionString)) 
{ 
    using (SqlCommand cmd = new SqlCommand(QueryName, conn)) 
    { 
     conn.Open(); 

     if (Params != null) 
      cmd.Parameters.AddRange(Params); 

     cmd.CommandType = CommandType.StoredProcedure; 

     ret = cmd.ExecuteNonQuery(); 

     conn.Close(); 
    } 
} 

return ret; 

Perché ricevo -1 al posto del numero effettivo di righe cambiato?

+0

Quindi le modifiche nella tabella hanno effettivamente luogo ma stai ricevendo -1? – Tudor

+0

Probabilmente restituisce qualsiasi cosa restituisca il tuo sproc, che è probabilmente -1 se non diversamente specificato. –

+0

Hai effettivamente catturato la chiamata SQL usando il profiler ed eseguito manualmente per vedere il numero di riga modificato effettivo? –

risposta

21

Se si utilizza questo metodo per chiamare una procedura di memorizzazione che eseguono UPDATE/INSERT in una tabella il ritorno metodo di -1 se il procudere memorizzato ha il NOCOUNT SET al valore ON.

- source

5

Da Microsoft:

Per UPDATE, INSERT e DELETE, il valore di ritorno è il numero di righe interessate dal comando. Quando un trigger esiste su una tabella inserita o aggiornata, il valore di ritorno include il numero di righe interessate dall'operazione di inserimento o di aggiornamento e il numero di righe interessate dal trigger o dai trigger. Per tutti gli altri tipi di istruzioni, il valore restituito è -1. Se si verifica un rollback, anche il valore di ritorno è -1.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

Probabilmente si sta ottenendo -1 perché si sta utilizzando una stored procedure e non un cambiamento tavolo diretta

0

Quale valore stai ritornando dalla stored procedure? Puoi mostrare il codice per la procedura memorizzata. Probabilmente è necessario modificare la stored procedure per restituire il valore richiesto, OPPURE, la stored procedure restituisce un -1 in modo specifico o la variabile restituita dalla procedura memorizzata ha -1 come valore.

0

Ottenere l'output del conteggio delle righe dalla procedura memorizzata, ad esempio, utilizzando @[email protected]@Rowcount. Nel DAL, utilizzare dbManager.AddOutParameter("RowCount", DbType.Int32, rowCount); Quindi nelle righe finali otterrete come (int)dbManager.GetParameterValue("RowCount").

Problemi correlati