sql >> Database >  >> RDS >> Sqlserver

Probleem met RESTful webservice +JSON+SQL opgeslagen procedureproject

OK, er zijn dus verschillende dingen die je moet veranderen om het te laten werken:

  1. Voeg parameterloze constructor toe aan Note omdat deze nodig is voor deserialisatie:

    public Note()
    {
    }
    
  2. Weg met "statisch" in de velden van Note:

    openbaar statisch string Client { get; set; }

    openbaar statisch int Geval { krijgen; set; }

    openbaar statisch string Tekst { get; set; }

    openbaar statisch int NoteId {get; set; }

    openbaar statisch tekenreeks R1 { halen; set; }

    openbaar statisch tekenreeks R2 { halen; set; }

    openbaar statisch tekenreeks S1 { ophalen; set; }

    openbaar statisch DateTime Date {get; set; }

    openbaar statisch bool Type {get; set; }

  3. Stuur geen JSON-array als u slechts 1 object wilt, het zal niet deserialiseren. U verwacht een enkel object, geen array, dus stuur geen array.

  4. Je hebt Type als bool, maar je verzendt string "1", dit zal niet deserialiseren naar echte waarde zoals je zou verwachten. Stuur true/false (niet "true"/"false") of verander het type Type in string.

  5. Weg met dat privé-itemveld, je hebt het niet nodig:

    privé-notitie-item;

  6. Weg met die constructeurs die je daar hebt

    public Note(string json)

    openbare notitie (opmerking)

    Niet alleen dat ze nergens op slaan en niet werken, je hebt ze ook niet nodig omdat JSON deserializer de velden voor je zal vullen.

BEWERKEN: U zegt bijvoorbeeld dat het niet bouwt omdat er geen constructor meer is met één parameter. Natuurlijk bouwt het niet, er is deze lijn

Note notesdata = new Note(item);

maar die lijn heb je niet nodig. Wat is het idee achter deze lijn? U wilt een instantie van de Note-klasse, maar u hebt deze al in de variabele "item". U hoeft daar geen tweede kopie van te maken. Dus doe dit ook weg.

Een andere reden waarom het niet compileert, is dat je die statische velden verwijdert, terwijl je dit nog in je Add-methode hebt:

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

en ik ben er vrij zeker van dat u dat niet wilt. In plaats daarvan wilt u de instantie van het object gebruiken dat naar u is verzonden:

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

Een ander ding is dat er meestal geen reden is waarom de methode Add het object dat aan DB wordt toegevoegd, zou retourneren. Dus voel je vrij om dit te veranderen

   public Note Add(Note item)

naar dit

   public void Add(Note item)

en stuur niets terug, je hebt het niet nodig.

Ik ben geen expert op het gebied van SqlConnection en dingen eromheen, dus dat deel zal ik niet becommentariëren. Ik gebruik EF in mijn projecten voor het werken met DB. Er kunnen dus wat problemen zijn in dat deel, maar daar kan ik geen commentaar op geven.




  1. Tijdelijke tabellen maken in SQL

  2. Straal/dichtstbijzijnde resultaten - Google Maps API

  3. Meerdere MySQL-tabel naar json_encode

  4. Waarom Mysql's Group By en Oracle's Group by-gedrag verschillend zijn