none
SqlCommand und Output RRS feed

  • 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
    Donnerstag, 8. Dezember 2011 11:06

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

    Donnerstag, 8. Dezember 2011 11:20
    Beantworter

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

    Donnerstag, 8. Dezember 2011 11:20
    Beantworter
  • Hallo Roland DE,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Mittwoch, 14. Dezember 2011 12:06
    Moderator