sql >> Database teknologi >  >> RDS >> Sqlserver

Problem med RESTful webservice +JSON+SQL lagret procedureprojekt

OK, så der er flere ting, du skal ændre for at få det til at fungere:

  1. Tilføj parameterløs konstruktør til Note, da det vil være nødvendigt for deserialisering:

    public Note()
    {
    }
    
  2. Slip for "statisk" i Notes felter:

    offentlig statisk streng Client { get; sæt; }

    offentlig statisk int Case { få; sæt; }

    offentlig statisk streng Tekst { get; sæt; }

    offentlig statisk int NoteId { get; sæt; }

    offentlig statisk streng R1 { get; sæt; }

    offentlig statisk streng R2 { get; sæt; }

    offentlig statisk streng S1 { få; sæt; }

    offentlig statisk DatoTid Dato { get; sæt; }

    offentlig statisk bool Type { get; sæt; }

  3. Send ikke JSON-array, hvis du kun vil have 1 objekt, det vil ikke deserialiseres. Du forventer enkelt objekt, ikke array, så send ikke array.

  4. Du har Type som bool, men du sender streng "1", dette vil ikke deserialiseres til sand værdi, som du måske forventede. Send enten sand/falsk (ikke "sand"/"falsk") eller skift type Type til streng.

  5. Slip af med det private varefelt, du behøver det ikke:

    privat noteelement;

  6. Slip af med de konstruktører, du har der

    offentlig note(streng json)

    offentlig note(notat)

    Ikke kun at de ikke giver mening og ikke virker, du behøver dem ikke, da JSON-deserializer vil udfylde felterne for dig.

EDIT: For eksempel siger du, at det ikke bygger, fordi der ikke længere er en konstruktør med én parameter. Selvfølgelig bygger det ikke, der er denne linje

Note notesdata = new Note(item);

men du behøver ikke den linje. Hvad er ideen bag denne linje? Du vil have en forekomst af Note-klassen, men du har den allerede i "item"-variabel. Du behøver ikke at oprette en anden kopi af det. Så slip også med dette.

En anden grund til, hvorfor det ikke vil kompilere, er, at du slipper af med de statiske felter, mens du stadig har dette i din Tilføj-metode:

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

og det er jeg helt sikker på, at du ikke ønsker. I stedet vil du bruge forekomsten af ​​objektet, der blev sendt til dig:

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

En anden ting er, at der normalt ikke er nogen grund til, hvorfor Add-metoden skulle returnere det objekt, der tilføjes til DB. Så du er velkommen til at ændre dette

   public Note Add(Note item)

til dette

   public void Add(Note item)

og returner ikke noget, du behøver det ikke.

Jeg er ikke ekspert i SqlConnection og ting omkring det, så den del kommenterer jeg ikke. Jeg bruger EF i mine projekter til at arbejde med DB. Så der kan være nogle problemer i den del, men det kan jeg ikke udtale mig om.




  1. Hvordan får man det samlede antal rækker i en udført select-sætning?

  2. Oracle SQL Query logning

  3. Sammenføjning af to tabeller i en kompleks forespørgsel (ikke ensartede data)

  4. Eksporter tabeldata fra en SQL Server til en anden