Benutzer mit den meisten Antworten
SqlCommand und Output

Frage
-
Hallo Forum,
ich möchte in eine MS-SQL DB einen Satz schreiben oder ein Update ausführen. Je nachdem ob der Satz bereits vorhanden ist oder nicht.
Dazu habe ich folgenden Code.
string sqlUSatz = "DECLARE @iMode INT SET @iMode = 0 UPDATE MaskenTexte SET MaskenTexte.lang = @lang, MaskenTexte.normal = @normal, MaskenTexte.kurz = @kurz WHERE MaskenTexte.ID = @ID SET @iMode = 1"; sqlUSatz += "IF @@ROWCOUNT = 0 BEGIN INSERT INTO MaskenTexte (id, lang, normal, kurz) VALUES (@id, @lang, @normal, @kurz) SET @iMode = 2 END RETURN @iMode "; int AA = 0; conbasis.Open(); for (int i = 0; TableSpUebersetzung.Rows.Count > i; i++) { using (SqlCommand cmd = new SqlCommand(sqlUSatz, conbasis)) { cmd.Parameters.AddWithValue("ID", TableSpUebersetzung.Rows[i]["ID"].ToString()); cmd.Parameters.AddWithValue("lang", TableSpUebersetzung.Rows[i]["lang"].ToString()); cmd.Parameters.AddWithValue("normal", TableSpUebersetzung.Rows[i]["normal"].ToString()); cmd.Parameters.AddWithValue("kurz", TableSpUebersetzung.Rows[i]["kurz"].ToString()); cmd.Parameters["@iMode"].Direction = ParameterDirection.ReturnValue; cmd.ExecuteReader(); AA = (Int32)cmd.Parameters["@iMode"].Value; MessageBox.Show(AA.ToString()); } }
Nun möchte ich aber gerne noch wissen ob ein Insert oder ein Update ausgeführt wurde. Dazu habe ich den @iMode gesetzt.
Entweder 1 oder 2. Aber ich bekomme den Wert nicht zurück.
Die Zeile liefert einen Fehler. Was mache ich falsch ?
cmd.Parameters["@iMode"].Direction = ParameterDirection.ReturnValue;
Kann mir da jemand helfen ?
Danke.
Gruß Roland
Antworten
-
Hallo Roland,
RETURN ist nur in Prozeduren (oder Triggern) erlaubt.
Hier ginge ein SELECT @iMode AS iMode;
Wobei es sinnvoller wäre Du würdest einen SqlDataAdapter verwenden,
anstatt auf unnötig komplizierte Eigengewächse.
Gruß Elmar- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 14. Dezember 2011 12:06
Alle Antworten
-
Hallo Roland,
RETURN ist nur in Prozeduren (oder Triggern) erlaubt.
Hier ginge ein SELECT @iMode AS iMode;
Wobei es sinnvoller wäre Du würdest einen SqlDataAdapter verwenden,
anstatt auf unnötig komplizierte Eigengewächse.
Gruß Elmar- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 14. Dezember 2011 12:06