sql >> Base de Datos >  >> RDS >> Sqlserver

Problema con el servicio web RESTful + JSON + SQL proyecto de procedimiento almacenado

Bien, hay varias cosas que debes cambiar para que funcione:

  1. Agregue un constructor sin parámetros a Note, ya que será necesario para la deserialización:

    public Note()
    {
    }
    
  2. Deshágase de "estático" en los campos de Nota:

    público estático cadena Cliente { obtener; establecer;

    público estático int Caso { obtener; establecer;

    público estático cadena Texto { obtener; establecer;

    público estático int NoteId { obtener; establecer;

    público estático cadena R1 { obtener; establecer;

    público estático cadena R2 { obtener; establecer;

    público estático cadena S1 { obtener; establecer;

    público estático FechaHora Fecha { obtener; establecer;

    público estático bool Tipo { obtener; establecer;

  3. No envíe una matriz JSON si desea solo 1 objeto, no se deserializará. Está esperando un solo objeto, no una matriz, así que no envíe una matriz.

  4. Tiene Type como bool, pero está enviando la cadena "1", esto no se deserializará al valor verdadero como podría esperar. Envíe verdadero/falso (no "verdadero"/"falso") o cambie el tipo de Tipo a cadena.

  5. Deshazte de ese campo de elemento privado, no lo necesitas:

    elemento de nota privada;

  6. Deshazte de esos constructores que tienes ahí

    nota pública (cadena json)

    nota pública (elemento de nota)

    No solo no tienen sentido y no funcionarán, sino que no los necesita, ya que el deserializador JSON llenará los campos por usted.

EDITAR: Por ejemplo, dices que no construye porque ya no hay un constructor con un parámetro. Por supuesto que no construye, existe esta línea

Note notesdata = new Note(item);

pero usted no necesita esa línea. ¿Cuál es la idea detrás de esta línea? Desea una instancia de la clase Note, pero ya la tiene en la variable "elemento". No necesita crear una segunda copia de eso. Así que deshazte de esto también.

Otra razón por la que no compilará es que se deshace de esos campos estáticos, mientras todavía tiene esto en su método Add:

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

y estoy bastante seguro de que no quieres eso. En su lugar, desea utilizar la instancia del objeto que se le envió:

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

Otra cosa es que, por lo general, no hay ninguna razón por la que el método Agregar devuelva el objeto que se agrega a la base de datos. Así que siéntete libre de cambiar esto

   public Note Add(Note item)

a esto

   public void Add(Note item)

y no devuelvas nada, no lo necesitas.

No soy un experto en SqlConnection y cosas a su alrededor, por lo que no comento esa parte. Uso EF en mis proyectos para trabajar con DB. Así que puede haber algunos problemas en esa parte, pero no puedo comentar al respecto.