Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Problème avec le projet de procédure stockée RESTful webservice + JSON + SQL

OK, il y a donc plusieurs choses que vous devez changer pour que cela fonctionne :

  1. Ajoutez un constructeur sans paramètre à Note car il sera nécessaire pour la désérialisation :

    public Note()
    {
    }
    
  2. Débarrassez-vous du "statique" dans les champs de Note :

    public statique chaîne Client { obtenir ; Positionner; }

    public statique int Case { obtenir ; Positionner; }

    public statique chaîne Texte { obtenir ; Positionner; }

    public statique int NoteId { obtenir ; Positionner; }

    public statique chaîne R1 { obtenir ; Positionner; }

    public statique chaîne R2 { obtenir ; Positionner; }

    public statique chaîne S1 { obtenir ; Positionner; }

    public statique DateHeure Date { obtenir ; Positionner; }

    public statique booléen Type { obtenir ; Positionner; }

  3. N'envoyez pas de tableau JSON si vous ne voulez qu'un seul objet, il ne se désérialisera pas. Vous attendez un objet unique, pas un tableau, donc n'envoyez pas de tableau.

  4. Vous avez Type comme bool, mais vous envoyez la chaîne "1", cela ne se désérialisera pas en valeur vraie comme vous pourriez vous y attendre. Soit envoyer vrai/faux (et non "vrai"/"faux"), soit changer le type de Type en chaîne.

  5. Débarrassez-vous de ce champ d'élément privé, vous n'en avez pas besoin :

    élément de note privé ;

  6. Débarrassez-vous de ces constructeurs que vous avez là

    Note publique (chaîne json)

    Note publique (élément de note)

    Non seulement ils n'ont aucun sens et ne fonctionneront pas, mais vous n'en avez pas besoin car le désérialiseur JSON remplira les champs pour vous.

MODIF : Par exemple, vous dites qu'il ne construit pas car il n'y a plus de constructeur avec un paramètre. Bien sûr, il ne construit pas, il y a cette ligne

Note notesdata = new Note(item);

mais vous n'avez pas besoin de cette ligne. Quelle est l'idée derrière cette ligne ? Vous voulez une instance de la classe Note, mais vous l'avez déjà dans la variable "item". Vous n'avez pas besoin d'en créer une deuxième copie. Alors débarrassez-vous de cela aussi.

Une autre raison pour laquelle il ne compilera pas est que vous vous débarrassez de ces champs statiques, alors que vous avez toujours ceci dans votre méthode Add :

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

et je suis sûr que vous ne voulez pas cela. À la place, vous souhaitez utiliser l'instance de l'objet qui vous a été envoyée :

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

Une autre chose est qu'il n'y a généralement aucune raison pour que la méthode Add renvoie l'objet ajouté à la base de données. Alors n'hésitez pas à changer cela

   public Note Add(Note item)

à ça

   public void Add(Note item)

et ne retournez rien, vous n'en avez pas besoin.

Je ne suis pas un expert de SqlConnection et des choses qui l'entourent, donc je ne commente pas cette partie. J'utilise EF dans mes projets pour travailler avec DB. Il peut donc y avoir des problèmes dans cette partie, mais je ne peux pas en parler.