none
Falsche Syntax in der Nähe von '0' RRS feed

  • Frage

  • Hallo ich hätte da ein kleines Problem,

    ich habe einen Button, mit dessen Hilfe ich einen neuen Datensatz in eine SQL-Datenbank Tabelle eintragen möchte.
    Einer dieser Werte, der in eine Spalte eingetragen wird, ist abhängig von anderen Datensätzen.
    Mein Code sieht folgendermaßen aus:

    protected void btnZaehlerstandSave_Click(object sender, CommandEventArgs e)
        {
                string connectionString = ConfigurationManager.ConnectionStrings["dataConnection"].ToString();
                SqlConnection conn = new SqlConnection(connectionString);
                {
                    SqlCommand command2 = new SqlCommand("SELECT COUNT(*) as CountStaende FROM tbl_zaehlerstand WHERE zaehler_id = {0}", conn);
                    conn.Open();
    
                    int returnValue = (int)command2.ExecuteScalar();
                    returnValue = returnValue + 1;
    
    
                    SqlCommand command = new SqlCommand("INSERT INTO tbl_zaehlerstand(zaehler_id, ablesung_nr, ablesung_dat, ablesung_stand, ablesung_bem) VALUES (@zaehler_id, @ablesung_nr, @ablesung_dat, @ablesung_stand, @ablesung_bem)", conn);
                    command.Parameters.AddWithValue("@zaehler_id",(string)e.CommandArgument);
                    command.Parameters.AddWithValue("@ablesung_nr",returnValue.ToString());
                    command.Parameters.AddWithValue("@ablesung_dat",Calender.SelectedDate);
                    command.Parameters.AddWithValue("@ablesung_stand",txtAblesungsstand_Content.Text);
                    command.Parameters.AddWithValue("@ablesung_bem",txtBemerkung_Content.Text);
    
                    command.ExecuteNonQuery();
                    conn.Close();

    die @zaehler_id hat der Button zuvor übergeben bekommen. @ablesung_dat, @ablesung_stand, @ablesung_bem werden eingetragen. @ablesung_nr soll er bekommen indem er durchzählt wieviele Zählerstände bereits unter der Zähler_id zu finden sind dies +1 setzt.

    Er stört sich jedoch an:

    int returnValue = (int)command2.ExecuteScalar();

    Mit folgender Fehlermeldung:

    Falsche Syntax in der Nähe von '0'

    An diesem Zähler sind bereits 9 Stände hinterlegt, demnach müsste er eine 10 herausgeben.

    Hilfe, Hilfe :D

    Dienstag, 25. August 2015 09:54

Antworten

  • Das ist ja nun ein komplexes Objekt, das kannst Du nicht direkt mit einem skalaren Wert in der Datenbank vergleichen; mach es doch genau so wie beim dem INSERT SQL Command, wo Du mit Parametern arbeitest, was auch die richtige Weise ist.

    command.Parameters.AddWithValue("@zaehler_id",(string)e.CommandArgument);


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 25. August 2015 14:22

Alle Antworten

  • ..."SELECT COUNT(*) as CountStaende FROM tbl_zaehlerstand WHERE zaehler_id = {0}"...
                    

    Hallo,

    {0} ist in .NET ein Platzhalter, den Du aber nirgends ersetzt und so wird er 1:1 an den SQL Server gesendet und der versteht den Platzhalter nicht; daher die Fehlermeldung.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]


    Dienstag, 25. August 2015 10:09
  • Danke für die Antwort.

    Mal ganz doof gefragt, wie müsste ich es formulieren, damit er das Count nach zaehler_id = "CommandEventArgs e" filtert?

    Dienstag, 25. August 2015 13:59
  • Das ist ja nun ein komplexes Objekt, das kannst Du nicht direkt mit einem skalaren Wert in der Datenbank vergleichen; mach es doch genau so wie beim dem INSERT SQL Command, wo Du mit Parametern arbeitest, was auch die richtige Weise ist.

    command.Parameters.AddWithValue("@zaehler_id",(string)e.CommandArgument);


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 25. August 2015 14:22
  • Manchmal denk ich einfach zu kompliziert.
    Vielen lieben Dank.
    Jetzt funktioniert es :)

    Dienstag, 25. August 2015 14:45