Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Problema com o projeto de procedimento armazenado RESTful webservice + JSON + SQL


OK, então há várias coisas que você precisa mudar para fazê-lo funcionar:

  1. Adicione o construtor sem parâmetros ao Note, pois ele será necessário para desserialização:
    public Note()
    {
    }
    

  2. Livre-se de "estático" nos campos do Note:

    público estático string Cliente { obter; definir; }

    público estático int Caso { obter; definir; }

    público estático string Texto { obter; definir; }

    público estático int NoteId { get; definir; }

    público estático string R1 { obter; definir; }

    público estático string R2 { obter; definir; }

    público estático string S1 { obter; definir; }

    público estático DataHora Data { obter; definir; }

    público estático bool Tipo { get; definir; }

  3. Não envie array JSON se você quiser apenas 1 objeto, ele não será desserializado. Você está esperando um único objeto, não um array, então não envie um array.

  4. Você tem Type como bool, mas está enviando a string "1", isso não desserializará para o valor verdadeiro como você poderia esperar. Envie true/false (não "true"/"false") ou altere o tipo de Type para string.

  5. Livre-se desse campo de item privado, você não precisa dele:

    item de Nota privada;

  6. Livre-se desses construtores que você tem lá

    Nota pública(string json)

    Nota pública(Item de nota)

    Além de não fazerem sentido e não funcionarem, você não precisa deles, pois o desserializador JSON preencherá os campos para você.

EDITAR: Por exemplo, você diz que não constrói porque não existe mais um construtor com um parâmetro. Claro que não constrói, existe essa linha
Note notesdata = new Note(item);

mas você não precisa dessa linha. Qual é a ideia por trás dessa linha? Você quer uma instância da classe Note, mas já a tem na variável "item". Você não precisa criar uma segunda cópia disso. Portanto, livre-se disso também.

Outra razão pela qual ele não compila é que você se livra desses campos estáticos, enquanto ainda tem isso em seu método Add:
        cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = Note.Text.Trim();
        cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = Note.Date;

e tenho certeza de que você não quer isso. Em vez disso, você deseja usar a instância do objeto que foi enviado a você:
        cmd.Parameters.Add("@Text", SqlDbType.VarChar).Value = item.Text.Trim();
        cmd.Parameters.Add("@When", SqlDbType.DateTime).Value = item.Date;

Outra coisa é que geralmente não há razão para o método Add retornar o objeto que está sendo adicionado ao banco de dados. Então sinta-se à vontade para mudar isso
   public Note Add(Note item)

para isso
   public void Add(Note item)

e não devolva nada, você não precisa.

Não sou especialista em SqlConnection e coisas ao seu redor, então essa parte não comento. Eu uso EF em meus projetos para trabalhar com DB. Portanto, pode haver alguns problemas nessa parte, mas não posso comentar sobre isso.