c #: ExecuteNonQuery () gibt -1 zurück

8

Ich habe diese Methode zuvor verwendet, um die Anzahl der geänderten Zeilen zurückzugeben. Ich bin es, um eine Einfügemethode auszuführen, die Einfügung läuft gut in der gespeicherten Prozedur, aber der Rückgabewert von der ExecuteNonQuery gibt immer -1 zurück.

Hier ist mein C # -Code:

%Vor%

Warum bekomme ich -1 anstatt der tatsächlichen Anzahl der geänderten Zeilen?

    
Funky 14.11.2011, 16:49
quelle

4 Antworten

21
  

Wenn Sie diese Methode verwenden, um eine ablaufende Speicherprozedur aufzurufen   UPDATE / INSERT in einer Tabelle gibt die Methode -1 zurück, wenn das Procurodere gespeichert ist   hat den SET NOCOUNT auf ON-Wert.

- Quelle

    
kol 14.11.2011, 16:52
quelle
5

Von Microsoft:

  

Bei UPDATE-, INSERT- und DELETE-Anweisungen ist der Rückgabewert die Anzahl der vom Befehl betroffenen Zeilen. Wenn ein Trigger für eine Tabelle vorhanden ist, die eingefügt oder aktualisiert wird, enthält der Rückgabewert die Anzahl der Zeilen, die von der Einfüge- oder Aktualisierungsoperation betroffen sind, sowie die Anzahl der Zeilen, auf die sich der Trigger oder die Trigger auswirken. Für alle anderen Arten von Anweisungen ist der Rückgabewert -1. Wenn ein Rollback auftritt, ist der Rückgabewert ebenfalls -1.

Ссылка

Sie erhalten wahrscheinlich -1, weil Sie eine gespeicherte Prozedur und nicht eine direkte Tabellenänderung verwenden

    
Michael Gattuso 14.11.2011 16:55
quelle
0

Welchen Wert geben Sie von Ihrer gespeicherten Prozedur zurück? Können Sie den Code für Ihre gespeicherte Prozedur anzeigen? Sie müssen wahrscheinlich Ihre gespeicherte Prozedur bearbeiten, um den erforderlichen Wert zurückzugeben, ODER, Ihre gespeicherte Prozedur gibt entweder -1 zurück oder die Variable, die die gespeicherte Prozedur zurückgibt, hat -1 als Wert.

    
PackratDragon 14.11.2011 17:23
quelle
0

Erhalte die Zeilenanzahl, die von der gespeicherten Prozedur ausgegeben wird, so wie @rowCount=@@Rowcount . In der DAL, verwenden Sie dbManager.AddOutParameter("RowCount", DbType.Int32, rowCount); Dann in den letzten Zeilen erhalten Sie als (int)dbManager.GetParameterValue("RowCount") .

    
Rubysmita 27.01.2016 22:22
quelle

Tags und Links