sql >> Databasteknik >  >> RDS >> Sqlserver

Problem med RESTful webservice +JSON+SQL lagrad procedurprojekt

OK, så det finns flera saker som du behöver ändra för att det ska fungera:

  1. Lägg till parameterlös konstruktor till Note eftersom det kommer att behövas för deserialisering:

    public Note()
    {
    }
    
  2. Bli av med "statisk" i Notes fält:

    offentlig statisk string Client { get; uppsättning; }

    offentlig statisk int Case { get; uppsättning; }

    offentlig statisk sträng Text { get; uppsättning; }

    offentlig statisk int NoteId { get; uppsättning; }

    offentlig statisk sträng R1 { get; uppsättning; }

    offentlig statisk sträng R2 { get; uppsättning; }

    offentlig statisk sträng S1 { get; uppsättning; }

    offentlig statisk DateTime Datum { get; uppsättning; }

    offentlig statisk bool Typ { get; uppsättning; }

  3. Skicka inte JSON-array om du bara vill ha ett objekt, det kommer inte att deserialiseras. Du förväntar dig ett enda objekt, inte array, så skicka inte array.

  4. Du har Typ som bool, men du skickar strängen "1", detta kommer inte att deserialiseras till sant värde som du kanske förväntade dig. Antingen skicka true/false (inte "true"/"false") eller ändra typ av typ till sträng.

  5. Bli av med det privata objektfältet, du behöver det inte:

    privat anteckningsobjekt;

  6. Bli av med de där konstruktörerna som du har där

    public Note(string json)

    offentlig anteckning(anteckningsobjekt)

    Inte bara att de är meningslösa och inte fungerar, du behöver dem inte eftersom JSON-deserializer fyller fälten åt dig.

EDIT: Till exempel, du säger att det inte bygger eftersom det inte längre finns en konstruktor med en parameter. Naturligtvis bygger det inte, det finns den här linjen

Note notesdata = new Note(item);

men du behöver inte den linjen. Vad är tanken bakom denna linje? Du vill ha en instans av Note-klassen, men du har den redan i variabeln "objekt". Du behöver inte skapa en andra kopia av det. Så bli av med detta också.

En annan anledning till varför den inte kompilerar är att du blir av med de statiska fälten medan du fortfarande har det här i din Add-metod:

        cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = Note.Text.Trim();
        cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = Note.Date;

och jag är helt säker på att du inte vill det. Istället vill du använda instansen av objektet som skickades till dig:

        cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = item.Text.Trim();
        cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = item.Date;

En annan sak är att det vanligtvis inte finns någon anledning till varför Add-metoden skulle returnera objektet som läggs till i DB. Så ändra gärna detta

   public Note Add(Note item)

till detta

   public void Add(Note item)

och lämna inte tillbaka något, du behöver det inte.

Jag är ingen expert på SqlConnection och saker runt omkring, så den delen kommenterar jag inte. Jag använder EF i mina projekt för att arbeta med DB. Så det kan finnas några problem i den delen, men jag kan inte kommentera det.




  1. Konvertera data från MySQL till JSON med PHP

  2. Hur lägger man till en filströmskolumn i Entity Framework 4.0-modellens första designer?

  3. Kan jag starta en trigger på select-satsen i mysql?

  4. Använda kryptering för att stärka PostgreSQL-databassäkerheten