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

Problema con il progetto di procedura memorizzata del servizio Web RESTful +JSON+SQL

OK, quindi ci sono diverse cose che devi cambiare per farlo funzionare:

  1. Aggiungi un costruttore senza parametri a Note poiché sarà necessario per la deserializzazione:

    public Note()
    {
    }
    
  2. Sbarazzarsi di "statico" nei campi di Note:

    pubblico statico stringa Cliente { get; impostare; }

    pubblico statico int Caso { ottenere; impostare; }

    pubblico statico stringa Testo { get; impostare; }

    pubblico statico int IdNota { get; impostare; }

    pubblico statico stringa R1 { ottenere; impostare; }

    pubblico statico stringa R2 { ottenere; impostare; }

    pubblico statico stringa S1 { ottenere; impostare; }

    pubblico statico DateTime Data { ottenere; impostare; }

    pubblico statico bool Digita { get; impostare; }

  3. Non inviare array JSON se vuoi solo 1 oggetto, non verrà deserializzato. Ti aspetti un singolo oggetto, non un array, quindi non inviare array.

  4. Hai Type come bool, ma stai inviando la stringa "1", questo non verrà deserializzato al valore true come potresti aspettarti. Invia true/false (non "true"/"false") o cambia il tipo di tipo in stringa.

  5. Sbarazzati di quel campo dell'elemento privato, non ti serve:

    elemento Nota privata;

  6. Sbarazzati di quei costruttori che hai lì

    Nota pubblica(string json)

    Nota pubblica (elemento nota)

    Non solo non hanno senso e non funzionano, ma non ti servono perché il deserializzatore JSON riempirà i campi per te.

MODIFICA: Ad esempio, dici che non viene compilato perché non esiste più un costruttore con un parametro. Ovviamente non si costruisce, c'è questa linea

Note notesdata = new Note(item);

ma non hai bisogno di quella linea. Qual è l'idea alla base di questa linea? Vuoi un'istanza della classe Note, ma l'hai già nella variabile "item". Non è necessario crearne una seconda copia. Quindi sbarazzati anche di questo.

Un altro motivo per cui non verrà compilato è che ti sbarazzi di quei campi statici, mentre hai ancora questo nel tuo metodo Aggiungi:

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

e sono abbastanza sicuro che tu non lo desideri. Invece, vuoi usare l'istanza dell'oggetto che ti è stato inviato:

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

Un'altra cosa è che di solito non c'è motivo per cui il metodo Add restituisca l'oggetto aggiunto al DB. Quindi sentiti libero di cambiarlo

   public Note Add(Note item)

a questo

   public void Add(Note item)

e non restituire nulla, non ti serve.

Non sono un esperto di SqlConnection e cose che lo circondano, quindi quella parte non commento. Uso EF nei miei progetti per lavorare con DB. Quindi potrebbero esserci dei problemi in quella parte, ma non posso commentarlo.